Modifying a cloned image of replica data

ABSTRACT

Modifying a clone image of a dataset, including: generating, based on metadata describing one or more updates to a dataset, a tracking copy of replica data on a target data repository; generating, after receiving an indication to begin accepting modifications to the tracking copy of the replica data, a cloned image of the dataset that is modifiable without modifying the tracking copy of the replica data; and responsive to a storage operation directed to the target data repository, modifying the cloned image of the dataset without modifying the tracking copy of the replica data.

CROSS REFERENCE TO RELATED APPLICATIONS

This is a continuation application for patent entitled to a filing dateand claiming the benefit of earlier-filed U.S. Pat. No. 11,360,689,issued Jun. 14, 2022, herein incorporated by reference in its entirety,which claims priority to U.S. Provisional Patent Application Ser. No.62/900,330, filed Sep. 13, 2019.

BRIEF DESCRIPTION OF DRAWINGS

FIG. 1A illustrates a first example system for data storage.

FIG. 1B illustrates a second example system for data storage.

FIG. 1C illustrates a third example system for data storage.

FIG. 1D illustrates a fourth example system for data storage.

FIG. 2A is a perspective view of a storage cluster with multiple storagenodes and internal storage coupled to each storage node to providenetwork attached storage.

FIG. 2B is a diagram showing an interconnect switch coupling multiplestorage nodes.

FIG. 2C is a multiple level block diagram, showing contents of a storagenode and contents of one of the non-volatile solid state storage unitsin accordance with some embodiments.

FIG. 2D shows a storage server environment, which uses embodiments ofthe storage nodes and storage units of some previous figures inaccordance with some embodiments.

FIG. 2E is a blade hardware block diagram, showing a control plane,compute and storage planes, and authorities interacting with underlyingphysical resources.

FIG. 2F depicts elasticity software layers in blades of a storagecluster.

FIG. 2G depicts authorities and storage resources in blades of a storagecluster.

FIG. 3A sets forth a diagram of a storage system that is coupled fordata communications with a cloud services provider in accordance withsome embodiments of the present disclosure.

FIG. 3B sets forth a diagram of a storage system.

FIG. 3C sets forth an example of a cloud-based storage system.

FIG. 3D illustrates an exemplary computing device that may bespecifically configured to perform one or more of the processesdescribed herein.

FIG. 4A sets forth a block diagram illustrating a plurality of storagesystems that support a pod according to some embodiments of the presentdisclosure.

FIG. 4B sets forth a block diagram illustrating a metadatarepresentation that supports a pod and configurable data replicationaccording to some embodiments of the present disclosure.

FIG. 5 sets forth a block diagram illustrating a plurality of storagesystems that support a pod according to some embodiments of the presentdisclosure.

FIG. 6 sets forth a block diagram illustrating a plurality of storagesystems that support configurable data replication according to someembodiments of the present disclosure.

FIG. 7 sets forth a block diagram illustrating a plurality of storagesystems that support configurable data replication according to someembodiments of the present disclosure.

FIG. 8 sets forth a flow chart illustrating an additional example methodfor cloning a tracking copy of replica data according to someembodiments of the present disclosure.

FIG. 9 sets forth a flow chart illustrating an example method forcloning a tracking copy of replica data to some embodiments of thepresent disclosure.

DESCRIPTION OF EMBODIMENTS

Example methods, apparatus, and products for a cloning a tracking copyof replica data in accordance with embodiments of the present disclosureare described with reference to the accompanying drawings, beginningwith FIG. 1A. FIG. 1A illustrates an example system for data storage, inaccordance with some implementations. System 100 (also referred to as“storage system” herein) includes numerous elements for purposes ofillustration rather than limitation. It may be noted that system 100 mayinclude the same, more, or fewer elements configured in the same ordifferent manner in other implementations.

System 100 includes a number of computing devices 164A-B. Computingdevices (also referred to as “client devices” herein) may be embodied,for example, a server in a data center, a workstation, a personalcomputer, a notebook, or the like. Computing devices 164A-B may becoupled for data communications to one or more storage arrays 102A-Bthrough a storage area network (‘SAN’) 158 or a local area network(‘LAN’) 160.

The SAN 158 may be implemented with a variety of data communicationsfabrics, devices, and protocols. For example, the fabrics for SAN 158may include Fibre Channel, Ethernet, Infiniband, Serial Attached SmallComputer System Interface (‘SAS’), or the like. Data communicationsprotocols for use with SAN 158 may include Advanced TechnologyAttachment (‘ATA’), Fibre Channel Protocol, Small Computer SystemInterface (‘SCSI’), Internet Small Computer System Interface (‘iSCSI’),HyperSCSI, Non-Volatile Memory Express (‘NVMe’) over Fabrics, or thelike. It may be noted that SAN 158 is provided for illustration, ratherthan limitation. Other data communication couplings may be implementedbetween computing devices 164A-B and storage arrays 102A-B.

The LAN 160 may also be implemented with a variety of fabrics, devices,and protocols. For example, the fabrics for LAN 160 may include Ethernet(802.3), wireless (802.11), or the like. Data communication protocolsfor use in LAN 160 may include Transmission Control Protocol (‘TCP’),User Datagram Protocol (‘UDP’), Internet Protocol (‘IP’), HyperTextTransfer Protocol (‘HTTP’), Wireless Access Protocol (‘WAP’), HandheldDevice Transport Protocol (‘HDTP’), Session Initiation Protocol (‘SIP’),Real Time Protocol (‘RTP’), or the like.

Storage arrays 102A-B may provide persistent data storage for thecomputing devices 164A-B. Storage array 102A may be contained in achassis (not shown), and storage array 102B may be contained in anotherchassis (not shown), in implementations. Storage array 102A and 102B mayinclude one or more storage array controllers 110A-D (also referred toas “controller” herein). A storage array controller 110A-D may beembodied as a module of automated computing machinery comprisingcomputer hardware, computer software, or a combination of computerhardware and software. In some implementations, the storage arraycontrollers 110A-D may be configured to carry out various storage tasks.Storage tasks may include writing data received from the computingdevices 164A-B to storage array 102A-B, erasing data from storage array102A-B, retrieving data from storage array 102A-B and providing data tocomputing devices 164A-B, monitoring and reporting of disk utilizationand performance, performing redundancy operations, such as RedundantArray of Independent Drives (‘RAID’) or RAID-like data redundancyoperations, compressing data, encrypting data, and so forth.

Storage array controller 110A-D may be implemented in a variety of ways,including as a Field Programmable Gate Array (‘FPGA’), a ProgrammableLogic Chip (‘PLC’), an Application Specific Integrated Circuit (‘ASIC’),System-on-Chip (‘SOC’), or any computing device that includes discretecomponents such as a processing device, central processing unit,computer memory, or various adapters. Storage array controller 110A-Dmay include, for example, a data communications adapter configured tosupport communications via the SAN 158 or LAN 160. In someimplementations, storage array controller 110A-D may be independentlycoupled to the LAN 160. In implementations, storage array controller110A-D may include an I/O controller or the like that couples thestorage array controller 110A-D for data communications, through amidplane (not shown), to a persistent storage resource 170A-B (alsoreferred to as a “storage resource” herein). The persistent storageresource 170A-B main include any number of storage drives 171A-F (alsoreferred to as “storage devices” herein) and any number of non-volatileRandom Access Memory (‘NVRAM’) devices (not shown).

In some implementations, the NVRAM devices of a persistent storageresource 170A-B may be configured to receive, from the storage arraycontroller 110A-D, data to be stored in the storage drives 171A-F. Insome examples, the data may originate from computing devices 164A-B. Insome examples, writing data to the NVRAM device may be carried out morequickly than directly writing data to the storage drive 171A-F. Inimplementations, the storage array controller 110A-D may be configuredto utilize the NVRAM devices as a quickly accessible buffer for datadestined to be written to the storage drives 171A-F. Latency for writerequests using NVRAM devices as a buffer may be improved relative to asystem in which a storage array controller 110A-D writes data directlyto the storage drives 171A-F. In some implementations, the NVRAM devicesmay be implemented with computer memory in the form of high bandwidth,low latency RAM. The NVRAM device is referred to as “non-volatile”because the NVRAM device may receive or include a unique power sourcethat maintains the state of the RAM after main power loss to the NVRAMdevice. Such a power source may be a battery, one or more capacitors, orthe like. In response to a power loss, the NVRAM device may beconfigured to write the contents of the RAM to a persistent storage,such as the storage drives 171A-F.

In implementations, storage drive 171A-F may refer to any deviceconfigured to record data persistently, where “persistently” or“persistent” refers as to a device's ability to maintain recorded dataafter loss of power. In some implementations, storage drive 171A-F maycorrespond to non-disk storage media. For example, the storage drive171A-F may be one or more solid-state drives (‘SSDs’), flash memorybased storage, any type of solid-state non-volatile memory, or any othertype of non-mechanical storage device. In other implementations, storagedrive 171A-F may include mechanical or spinning hard disk, such ashard-disk drives (‘HDD’).

In some implementations, the storage array controllers 110A-D may beconfigured for offloading device management responsibilities fromstorage drive 171A-F in storage array 102A-B. For example, storage arraycontrollers 110A-D may manage control information that may describe thestate of one or more memory blocks in the storage drives 171A-F. Thecontrol information may indicate, for example, that a particular memoryblock has failed and should no longer be written to, that a particularmemory block contains boot code for a storage array controller 110A-D,the number of program-erase (‘P/E’) cycles that have been performed on aparticular memory block, the age of data stored in a particular memoryblock, the type of data that is stored in a particular memory block, andso forth. In some implementations, the control information may be storedwith an associated memory block as metadata. In other implementations,the control information for the storage drives 171A-F may be stored inone or more particular memory blocks of the storage drives 171A-F thatare selected by the storage array controller 110A-D. The selected memoryblocks may be tagged with an identifier indicating that the selectedmemory block contains control information. The identifier may beutilized by the storage array controllers 110A-D in conjunction withstorage drives 171A-F to quickly identify the memory blocks that containcontrol information. For example, the storage controllers 110A-D mayissue a command to locate memory blocks that contain controlinformation. It may be noted that control information may be so largethat parts of the control information may be stored in multiplelocations, that the control information may be stored in multiplelocations for purposes of redundancy, for example, or that the controlinformation may otherwise be distributed across multiple memory blocksin the storage drive 171A-F.

In implementations, storage array controllers 110A-D may offload devicemanagement responsibilities from storage drives 171A-F of storage array102A-B by retrieving, from the storage drives 171A-F, controlinformation describing the state of one or more memory blocks in thestorage drives 171A-F. Retrieving the control information from thestorage drives 171A-F may be carried out, for example, by the storagearray controller 110A-D querying the storage drives 171A-F for thelocation of control information for a particular storage drive 171A-F.The storage drives 171A-F may be configured to execute instructions thatenable the storage drive 171A-F to identify the location of the controlinformation. The instructions may be executed by a controller (notshown) associated with or otherwise located on the storage drive 171A-Fand may cause the storage drive 171A-F to scan a portion of each memoryblock to identify the memory blocks that store control information forthe storage drives 171A-F. The storage drives 171A-F may respond bysending a response message to the storage array controller 110A-D thatincludes the location of control information for the storage drive171A-F. Responsive to receiving the response message, storage arraycontrollers 110A-D may issue a request to read data stored at theaddress associated with the location of control information for thestorage drives 171A-F.

In other implementations, the storage array controllers 110A-D mayfurther offload device management responsibilities from storage drives171A-F by performing, in response to receiving the control information,a storage drive management operation. A storage drive managementoperation may include, for example, an operation that is typicallyperformed by the storage drive 171A-F (e.g., the controller (not shown)associated with a particular storage drive 171A-F). A storage drivemanagement operation may include, for example, ensuring that data is notwritten to failed memory blocks within the storage drive 171A-F,ensuring that data is written to memory blocks within the storage drive171A-F in such a way that adequate wear leveling is achieved, and soforth.

In implementations, storage array 102A-B may implement two or morestorage array controllers 110A-D. For example, storage array 102A mayinclude storage array controllers 110A and storage array controllers110B. At a given instance, a single storage array controller 110A-D(e.g., storage array controller 110A) of a storage system 100 may bedesignated with primary status (also referred to as “primary controller”herein), and other storage array controllers 110A-D (e.g., storage arraycontroller 110A) may be designated with secondary status (also referredto as “secondary controller” herein). The primary controller may haveparticular rights, such as permission to alter data in persistentstorage resource 170A-B (e.g., writing data to persistent storageresource 170A-B). At least some of the rights of the primary controllermay supersede the rights of the secondary controller. For instance, thesecondary controller may not have permission to alter data in persistentstorage resource 170A-B when the primary controller has the right. Thestatus of storage array controllers 110A-D may change. For example,storage array controller 110A may be designated with secondary status,and storage array controller 110B may be designated with primary status.

In some implementations, a primary controller, such as storage arraycontroller 110A, may serve as the primary controller for one or morestorage arrays 102A-B, and a second controller, such as storage arraycontroller 110B, may serve as the secondary controller for the one ormore storage arrays 102A-B. For example, storage array controller 110Amay be the primary controller for storage array 102A and storage array102B, and storage array controller 110B may be the secondary controllerfor storage array 102A and 102B. In some implementations, storage arraycontrollers 110C and 110D (also referred to as “storage processingmodules”) may neither have primary or secondary status. Storage arraycontrollers 110C and 110D, implemented as storage processing modules,may act as a communication interface between the primary and secondarycontrollers (e.g., storage array controllers 110A and 110B,respectively) and storage array 102B. For example, storage arraycontroller 110A of storage array 102A may send a write request, via SAN158, to storage array 102B. The write request may be received by bothstorage array controllers 110C and 110D of storage array 102B. Storagearray controllers 110C and 110D facilitate the communication, e.g., sendthe write request to the appropriate storage drive 171A-F. It may benoted that in some implementations storage processing modules may beused to increase the number of storage drives controlled by the primaryand secondary controllers.

In implementations, storage array controllers 110A-D are communicativelycoupled, via a midplane (not shown), to one or more storage drives171A-F and to one or more NVRAM devices (not shown) that are included aspart of a storage array 102A-B. The storage array controllers 110A-D maybe coupled to the midplane via one or more data communication links andthe midplane may be coupled to the storage drives 171A-F and the NVRAMdevices via one or more data communications links. The datacommunications links described herein are collectively illustrated bydata communications links 108A-D and may include a Peripheral ComponentInterconnect Express (‘PCIe’) bus, for example.

FIG. 1B illustrates an example system for data storage, in accordancewith some implementations. Storage array controller 101 illustrated inFIG. 1B may be similar to the storage array controllers 110A-D describedwith respect to FIG. 1A. In one example, storage array controller 101may be similar to storage array controller 110A or storage arraycontroller 110B. Storage array controller 101 includes numerous elementsfor purposes of illustration rather than limitation. It may be notedthat storage array controller 101 may include the same, more, or fewerelements configured in the same or different manner in otherimplementations. It may be noted that elements of FIG. 1A may beincluded below to help illustrate features of storage array controller101.

Storage array controller 101 may include one or more processing devices104 and random access memory (‘RAM’) 111. Processing device 104 (orcontroller 101) represents one or more general-purpose processingdevices such as a microprocessor, central processing unit, or the like.More particularly, the processing device 104 (or controller 101) may bea complex instruction set computing (‘CISC’) microprocessor, reducedinstruction set computing (‘RISC’) microprocessor, very long instructionword (‘VLIW’) microprocessor, or a processor implementing otherinstruction sets or processors implementing a combination of instructionsets. The processing device 104 (or controller 101) may also be one ormore special-purpose processing devices such as an application specificintegrated circuit (‘ASIC’), a field programmable gate array (‘FPGA’), adigital signal processor (‘DSP’), network processor, or the like.

The processing device 104 may be connected to the RAM 111 via a datacommunications link 106, which may be embodied as a high speed memorybus such as a Double-Data Rate 4 (‘DDR4’) bus. Stored in RAM 111 is anoperating system 112. In some implementations, instructions 113 arestored in RAM 111. Instructions 113 may include computer programinstructions for performing operations in in a direct-mapped flashstorage system. In one embodiment, a direct-mapped flash storage systemis one that that addresses data blocks within flash drives directly andwithout an address translation performed by the storage controllers ofthe flash drives.

In implementations, storage array controller 101 includes one or morehost bus adapters 103A-C that are coupled to the processing device 104via a data communications link 105A-C. In implementations, host busadapters 103A-C may be computer hardware that connects a host system(e.g., the storage array controller) to other network and storagearrays. In some examples, host bus adapters 103A-C may be a FibreChannel adapter that enables the storage array controller 101 to connectto a SAN, an Ethernet adapter that enables the storage array controller101 to connect to a LAN, or the like. Host bus adapters 103A-C may becoupled to the processing device 104 via a data communications link105A-C such as, for example, a PCIe bus.

In implementations, storage array controller 101 may include a host busadapter 114 that is coupled to an expander 115. The expander 115 may beused to attach a host system to a larger number of storage drives. Theexpander 115 may, for example, be a SAS expander utilized to enable thehost bus adapter 114 to attach to storage drives in an implementationwhere the host bus adapter 114 is embodied as a SAS controller.

In implementations, storage array controller 101 may include a switch116 coupled to the processing device 104 via a data communications link109. The switch 116 may be a computer hardware device that can createmultiple endpoints out of a single endpoint, thereby enabling multipledevices to share a single endpoint. The switch 116 may, for example, bea PCIe switch that is coupled to a PCIe bus (e.g., data communicationslink 109) and presents multiple PCIe connection points to the midplane.

In implementations, storage array controller 101 includes a datacommunications link 107 for coupling the storage array controller 101 toother storage array controllers. In some examples, data communicationslink 107 may be a QuickPath Interconnect (QPI) interconnect.

A traditional storage system that uses traditional flash drives mayimplement a process across the flash drives that are part of thetraditional storage system. For example, a higher level process of thestorage system may initiate and control a process across the flashdrives. However, a flash drive of the traditional storage system mayinclude its own storage controller that also performs the process. Thus,for the traditional storage system, a higher level process (e.g.,initiated by the storage system) and a lower level process (e.g.,initiated by a storage controller of the storage system) may both beperformed.

To resolve various deficiencies of a traditional storage system,operations may be performed by higher level processes and not by thelower level processes. For example, the flash storage system may includeflash drives that do not include storage controllers that provide theprocess. Thus, the operating system of the flash storage system itselfmay initiate and control the process. This may be accomplished by adirect-mapped flash storage system that addresses data blocks within theflash drives directly and without an address translation performed bythe storage controllers of the flash drives.

The operating system of the flash storage system may identify andmaintain a list of allocation units across multiple flash drives of theflash storage system. The allocation units may be entire erase blocks ormultiple erase blocks. The operating system may maintain a map oraddress range that directly maps addresses to erase blocks of the flashdrives of the flash storage system.

Direct mapping to the erase blocks of the flash drives may be used torewrite data and erase data. For example, the operations may beperformed on one or more allocation units that include a first data anda second data where the first data is to be retained and the second datais no longer being used by the flash storage system. The operatingsystem may initiate the process to write the first data to new locationswithin other allocation units and erasing the second data and markingthe allocation units as being available for use for subsequent data.Thus, the process may only be performed by the higher level operatingsystem of the flash storage system without an additional lower levelprocess being performed by controllers of the flash drives.

Advantages of the process being performed only by the operating systemof the flash storage system include increased reliability of the flashdrives of the flash storage system as unnecessary or redundant writeoperations are not being performed during the process. One possiblepoint of novelty here is the concept of initiating and controlling theprocess at the operating system of the flash storage system. Inaddition, the process can be controlled by the operating system acrossmultiple flash drives. This is contrast to the process being performedby a storage controller of a flash drive.

A storage system can consist of two storage array controllers that sharea set of drives for failover purposes, or it could consist of a singlestorage array controller that provides a storage service that utilizesmultiple drives, or it could consist of a distributed network of storagearray controllers each with some number of drives or some amount ofFlash storage where the storage array controllers in the networkcollaborate to provide a complete storage service and collaborate onvarious aspects of a storage service including storage allocation andgarbage collection.

FIG. 1C illustrates a third example system 117 for data storage inaccordance with some implementations. System 117 (also referred to as“storage system” herein) includes numerous elements for purposes ofillustration rather than limitation. It may be noted that system 117 mayinclude the same, more, or fewer elements configured in the same ordifferent manner in other implementations.

In one embodiment, system 117 includes a dual Peripheral ComponentInterconnect (PCP) flash storage device 118 with separately addressablefast write storage. System 117 may include a storage controller 119. Inone embodiment, storage controller 119A-D may be a CPU, ASIC, FPGA, orany other circuitry that may implement control structures necessaryaccording to the present disclosure. In one embodiment, system 117includes flash memory devices (e.g., including flash memory devices 120a-n), operatively coupled to various channels of the storage devicecontroller 119. Flash memory devices 120 a-n, may be presented to thecontroller 119A-D as an addressable collection of Flash pages, eraseblocks, and/or control elements sufficient to allow the storage devicecontroller 119A-D to program and retrieve various aspects of the Flash.In one embodiment, storage device controller 119A-D may performoperations on flash memory devices 120 a-n including storing andretrieving data content of pages, arranging and erasing any blocks,tracking statistics related to the use and reuse of Flash memory pages,erase blocks, and cells, tracking and predicting error codes and faultswithin the Flash memory, controlling voltage levels associated withprogramming and retrieving contents of Flash cells, etc.

In one embodiment, system 117 may include RAM 121 to store separatelyaddressable fast-write data. In one embodiment, RAM 121 may be one ormore separate discrete devices. In another embodiment, RAM 121 may beintegrated into storage device controller 119A-D or multiple storagedevice controllers. The RAM 121 may be utilized for other purposes aswell, such as temporary program memory for a processing device (e.g., aCPU) in the storage device controller 119.

In one embodiment, system 117 may include a stored energy device 122,such as a rechargeable battery or a capacitor. Stored energy device 122may store energy sufficient to power the storage device controller 119,some amount of the RAM (e.g., RAM 121), and some amount of Flash memory(e.g., Flash memory 120 a-120 n) for sufficient time to write thecontents of RAM to Flash memory. In one embodiment, storage devicecontroller 119A-D may write the contents of RAM to Flash Memory if thestorage device controller detects loss of external power.

In one embodiment, system 117 includes two data communications links 123a, 123 b. In one embodiment, data communications links 123 a, 123 b maybe PCI interfaces. In another embodiment, data communications links 123a, 123 b may be based on other communications standards (e.g.,HyperTransport, InfiniBand, etc.). Data communications links 123 a, 123b may be based on non-volatile memory express (‘NVMe’) or NVMe overfabrics (‘NVMf’) specifications that allow external connection to thestorage device controller 119A-D from other components in the storagesystem 117. It should be noted that data communications links may beinterchangeably referred to herein as PCI buses for convenience.

System 117 may also include an external power source (not shown), whichmay be provided over one or both data communications links 123 a, 123 b,or which may be provided separately. An alternative embodiment includesa separate Flash memory (not shown) dedicated for use in storing thecontent of RAM 121. The storage device controller 119A-D may present alogical device over a PCI bus which may include an addressablefast-write logical device, or a distinct part of the logical addressspace of the storage device 118, which may be presented as PCI memory oras persistent storage. In one embodiment, operations to store into thedevice are directed into the RAM 121. On power failure, the storagedevice controller 119A-D may write stored content associated with theaddressable fast-write logical storage to Flash memory (e.g., Flashmemory 120 a-n) for long-term persistent storage.

In one embodiment, the logical device may include some presentation ofsome or all of the content of the Flash memory devices 120 a-n, wherethat presentation allows a storage system including a storage device 118(e.g., storage system 117) to directly address Flash memory pages anddirectly reprogram erase blocks from storage system components that areexternal to the storage device through the PCI bus. The presentation mayalso allow one or more of the external components to control andretrieve other aspects of the Flash memory including some or all of:tracking statistics related to use and reuse of Flash memory pages,erase blocks, and cells across all the Flash memory devices; trackingand predicting error codes and faults within and across the Flash memorydevices; controlling voltage levels associated with programming andretrieving contents of Flash cells; etc.

In one embodiment, the stored energy device 122 may be sufficient toensure completion of in-progress operations to the Flash memory devices120 a-120 n stored energy device 122 may power storage device controller119A-D and associated Flash memory devices (e.g., 120 a-n) for thoseoperations, as well as for the storing of fast-write RAM to Flashmemory. Stored energy device 122 may be used to store accumulatedstatistics and other parameters kept and tracked by the Flash memorydevices 120 a-n and/or the storage device controller 119. Separatecapacitors or stored energy devices (such as smaller capacitors near orembedded within the Flash memory devices themselves) may be used forsome or all of the operations described herein.

Various schemes may be used to track and optimize the life span of thestored energy component, such as adjusting voltage levels over time,partially discharging the storage energy device 122 to measurecorresponding discharge characteristics, etc. If the available energydecreases over time, the effective available capacity of the addressablefast-write storage may be decreased to ensure that it can be writtensafely based on the currently available stored energy.

FIG. 1D illustrates a third example system 124 for data storage inaccordance with some implementations. In one embodiment, system 124includes storage controllers 125 a, 125 b. In one embodiment, storagecontrollers 125 a, 125 b are operatively coupled to Dual PCI storagedevices 119 a, 119 b and 119 c, 119 d, respectively. Storage controllers125 a, 125 b may be operatively coupled (e.g., via a storage network130) to some number of host computers 127 a-n.

In one embodiment, two storage controllers (e.g., 125 a and 125 b)provide storage services, such as a SCS) block storage array, a fileserver, an object server, a database or data analytics service, etc. Thestorage controllers 125 a, 125 b may provide services through somenumber of network interfaces (e.g., 126 a-d) to host computers 127 a-noutside of the storage system 124. Storage controllers 125 a, 125 b mayprovide integrated services or an application entirely within thestorage system 124, forming a converged storage and compute system. Thestorage controllers 125 a, 125 b may utilize the fast write memorywithin or across storage devices 119 a-d to journal in progressoperations to ensure the operations are not lost on a power failure,storage controller removal, storage controller or storage systemshutdown, or some fault of one or more software or hardware componentswithin the storage system 124.

In one embodiment, controllers 125 a, 125 b operate as PCI masters toone or the other PCI buses 128 a, 128 b. In another embodiment, 128 aand 128 b may be based on other communications standards (e.g.,HyperTransport, InfiniBand, etc.). Other storage system embodiments mayoperate storage controllers 125 a, 125 b as multi-masters for both PCIbuses 128 a, 128 b. Alternately, a PCI/NVMe/NVMf switchinginfrastructure or fabric may connect multiple storage controllers. Somestorage system embodiments may allow storage devices to communicate witheach other directly rather than communicating only with storagecontrollers. In one embodiment, a storage device controller 119 a may beoperable under direction from a storage controller 125 a to synthesizeand transfer data to be stored into Flash memory devices from data thathas been stored in RAM (e.g., RAM 121 of FIG. 1C). For example, arecalculated version of RAM content may be transferred after a storagecontroller has determined that an operation has fully committed acrossthe storage system, or when fast-write memory on the device has reacheda certain used capacity, or after a certain amount of time, to ensureimprove safety of the data or to release addressable fast-write capacityfor reuse. This mechanism may be used, for example, to avoid a secondtransfer over a bus (e.g., 128 a, 128 b) from the storage controllers125 a, 125 b. In one embodiment, a recalculation may include compressingdata, attaching indexing or other metadata, combining multiple datasegments together, performing erasure code calculations, etc.

In one embodiment, under direction from a storage controller 125 a, 125b, a storage device controller 119 a, 119 b may be operable to calculateand transfer data to other storage devices from data stored in RAM(e.g., RAM 121 of FIG. 1C) without involvement of the storagecontrollers 125 a, 125 b. This operation may be used to mirror datastored in one controller 125 a to another controller 125 b, or it couldbe used to offload compression, data aggregation, and/or erasure codingcalculations and transfers to storage devices to reduce load on storagecontrollers or the storage controller interface 129 a, 129 b to the PCIbus 128 a, 128 b.

A storage device controller 119A-D may include mechanisms forimplementing high availability primitives for use by other parts of astorage system external to the Dual PCI storage device 118. For example,reservation or exclusion primitives may be provided so that, in astorage system with two storage controllers providing a highly availablestorage service, one storage controller may prevent the other storagecontroller from accessing or continuing to access the storage device.This could be used, for example, in cases where one controller detectsthat the other controller is not functioning properly or where theinterconnect between the two storage controllers may itself not befunctioning properly.

In one embodiment, a storage system for use with Dual PCI direct mappedstorage devices with separately addressable fast write storage includessystems that manage erase blocks or groups of erase blocks as allocationunits for storing data on behalf of the storage service, or for storingmetadata (e.g., indexes, logs, etc.) associated with the storageservice, or for proper management of the storage system itself. Flashpages, which may be a few kilobytes in size, may be written as dataarrives or as the storage system is to persist data for long intervalsof time (e.g., above a defined threshold of time). To commit data morequickly, or to reduce the number of writes to the Flash memory devices,the storage controllers may first write data into the separatelyaddressable fast write storage on one more storage devices.

In one embodiment, the storage controllers 125 a, 125 b may initiate theuse of erase blocks within and across storage devices (e.g., 118) inaccordance with an age and expected remaining lifespan of the storagedevices, or based on other statistics. The storage controllers 125 a,125 b may initiate garbage collection and data migration data betweenstorage devices in accordance with pages that are no longer needed aswell as to manage Flash page and erase block lifespans and to manageoverall system performance.

In one embodiment, the storage system 124 may utilize mirroring and/orerasure coding schemes as part of storing data into addressable fastwrite storage and/or as part of writing data into allocation unitsassociated with erase blocks. Erasure codes may be used across storagedevices, as well as within erase blocks or allocation units, or withinand across Flash memory devices on a single storage device, to provideredundancy against single or multiple storage device failures or toprotect against internal corruptions of Flash memory pages resultingfrom Flash memory operations or from degradation of Flash memory cells.Mirroring and erasure coding at various levels may be used to recoverfrom multiple types of failures that occur separately or in combination.

The embodiments depicted with reference to FIGS. 2A-G illustrate astorage cluster that stores user data, such as user data originatingfrom one or more user or client systems or other sources external to thestorage cluster. The storage cluster distributes user data acrossstorage nodes housed within a chassis, or across multiple chassis, usingerasure coding and redundant copies of metadata. Erasure coding refersto a method of data protection or reconstruction in which data is storedacross a set of different locations, such as disks, storage nodes orgeographic locations. Flash memory is one type of solid-state memorythat may be integrated with the embodiments, although the embodimentsmay be extended to other types of solid-state memory or other storagemedium, including non-solid state memory. Control of storage locationsand workloads are distributed across the storage locations in aclustered peer-to-peer system. Tasks such as mediating communicationsbetween the various storage nodes, detecting when a storage node hasbecome unavailable, and balancing I/Os (inputs and outputs) across thevarious storage nodes, are all handled on a distributed basis. Data islaid out or distributed across multiple storage nodes in data fragmentsor stripes that support data recovery in some embodiments. Ownership ofdata can be reassigned within a cluster, independent of input and outputpatterns. This architecture described in more detail below allows astorage node in the cluster to fail, with the system remainingoperational, since the data can be reconstructed from other storagenodes and thus remain available for input and output operations. Invarious embodiments, a storage node may be referred to as a clusternode, a blade, or a server.

The storage cluster may be contained within a chassis, i.e., anenclosure housing one or more storage nodes. A mechanism to providepower to each storage node, such as a power distribution bus, and acommunication mechanism, such as a communication bus that enablescommunication between the storage nodes are included within the chassis.The storage cluster can run as an independent system in one locationaccording to some embodiments. In one embodiment, a chassis contains atleast two instances of both the power distribution and the communicationbus which may be enabled or disabled independently. The internalcommunication bus may be an Ethernet bus, however, other technologiessuch as PCIe, InfiniBand, and others, are equally suitable. The chassisprovides a port for an external communication bus for enablingcommunication between multiple chassis, directly or through a switch,and with client systems. The external communication may use a technologysuch as Ethernet, InfiniBand, Fibre Channel, etc. In some embodiments,the external communication bus uses different communication bustechnologies for inter-chassis and client communication. If a switch isdeployed within or between chassis, the switch may act as a translationbetween multiple protocols or technologies. When multiple chassis areconnected to define a storage cluster, the storage cluster may beaccessed by a client using either proprietary interfaces or standardinterfaces such as network file system (‘NFS’), common internet filesystem (‘CIFS’), small computer system interface (‘SCSI’) or hypertexttransfer protocol (‘HTTP’). Translation from the client protocol mayoccur at the switch, chassis external communication bus or within eachstorage node. In some embodiments, multiple chassis may be coupled orconnected to each other through an aggregator switch. A portion and/orall of the coupled or connected chassis may be designated as a storagecluster. As discussed above, each chassis can have multiple blades, eachblade has a media access control (‘MAC’) address, but the storagecluster is presented to an external network as having a single clusterIP address and a single MAC address in some embodiments.

Each storage node may be one or more storage servers and each storageserver is connected to one or more non-volatile solid state memoryunits, which may be referred to as storage units or storage devices. Oneembodiment includes a single storage server in each storage node andbetween one to eight non-volatile solid state memory units, however thisone example is not meant to be limiting. The storage server may includea processor, DRAM and interfaces for the internal communication bus andpower distribution for each of the power buses. Inside the storage node,the interfaces and storage unit share a communication bus, e.g., PCIExpress, in some embodiments. The non-volatile solid state memory unitsmay directly access the internal communication bus interface through astorage node communication bus, or request the storage node to accessthe bus interface. The non-volatile solid state memory unit contains anembedded CPU, solid state storage controller, and a quantity of solidstate mass storage, e.g., between 2-32 terabytes (‘TB’) in someembodiments. An embedded volatile storage medium, such as DRAM, and anenergy reserve apparatus are included in the non-volatile solid statememory unit. In some embodiments, the energy reserve apparatus is acapacitor, super-capacitor, or battery that enables transferring asubset of DRAM contents to a stable storage medium in the case of powerloss. In some embodiments, the non-volatile solid state memory unit isconstructed with a storage class memory, such as phase change ormagnetoresistive random access memory (‘MRAM’) that substitutes for DRAMand enables a reduced power hold-up apparatus.

One of many features of the storage nodes and non-volatile solid statestorage is the ability to proactively rebuild data in a storage cluster.The storage nodes and non-volatile solid state storage can determinewhen a storage node or non-volatile solid state storage in the storagecluster is unreachable, independent of whether there is an attempt toread data involving that storage node or non-volatile solid statestorage. The storage nodes and non-volatile solid state storage thencooperate to recover and rebuild the data in at least partially newlocations. This constitutes a proactive rebuild, in that the systemrebuilds data without waiting until the data is needed for a read accessinitiated from a client system employing the storage cluster. These andfurther details of the storage memory and operation thereof arediscussed below.

FIG. 2A is a perspective view of a storage cluster 161, with multiplestorage nodes 150 and internal solid-state memory coupled to eachstorage node to provide network attached storage or storage areanetwork, in accordance with some embodiments. A network attachedstorage, storage area network, or a storage cluster, or other storagememory, could include one or more storage clusters 161, each having oneor more storage nodes 150, in a flexible and reconfigurable arrangementof both the physical components and the amount of storage memoryprovided thereby. The storage cluster 161 is designed to fit in a rack,and one or more racks can be set up and populated as desired for thestorage memory. The storage cluster 161 has a chassis 138 havingmultiple slots 142. It should be appreciated that chassis 138 may bereferred to as a housing, enclosure, or rack unit. In one embodiment,the chassis 138 has fourteen slots 142, although other numbers of slotsare readily devised. For example, some embodiments have four slots,eight slots, sixteen slots, thirty-two slots, or other suitable numberof slots. Each slot 142 can accommodate one storage node 150 in someembodiments. Chassis 138 includes flaps 148 that can be utilized tomount the chassis 138 on a rack. Fans 144 provide air circulation forcooling of the storage nodes 150 and components thereof, although othercooling components could be used, or an embodiment could be devisedwithout cooling components. A switch fabric 146 couples storage nodes150 within chassis 138 together and to a network for communication tothe memory. In an embodiment depicted in herein, the slots 142 to theleft of the switch fabric 146 and fans 144 are shown occupied by storagenodes 150, while the slots 142 to the right of the switch fabric 146 andfans 144 are empty and available for insertion of storage node 150 forillustrative purposes. This configuration is one example, and one ormore storage nodes 150 could occupy the slots 142 in various furtherarrangements. The storage node arrangements need not be sequential oradjacent in some embodiments. Storage nodes 150 are hot pluggable,meaning that a storage node 150 can be inserted into a slot 142 in thechassis 138, or removed from a slot 142, without stopping or poweringdown the system. Upon insertion or removal of storage node 150 from slot142, the system automatically reconfigures in order to recognize andadapt to the change. Reconfiguration, in some embodiments, includesrestoring redundancy and/or rebalancing data or load.

Each storage node 150 can have multiple components. In the embodimentshown here, the storage node 150 includes a printed circuit board 159populated by a CPU 156, i.e., processor, a memory 154 coupled to the CPU156, and a non-volatile solid state storage 152 coupled to the CPU 156,although other mountings and/or components could be used in furtherembodiments. The memory 154 has instructions which are executed by theCPU 156 and/or data operated on by the CPU 156. As further explainedbelow, the non-volatile solid state storage 152 includes flash or, infurther embodiments, other types of solid-state memory.

Referring to FIG. 2A, storage cluster 161 is scalable, meaning thatstorage capacity with non-uniform storage sizes is readily added, asdescribed above. One or more storage nodes 150 can be plugged into orremoved from each chassis and the storage cluster self-configures insome embodiments. Plug-in storage nodes 150, whether installed in achassis as delivered or later added, can have different sizes. Forexample, in one embodiment a storage node 150 can have any multiple of 4TB, e.g., 8 TB, 12 TB, 16 TB, 32 TB, etc. In further embodiments, astorage node 150 could have any multiple of other storage amounts orcapacities. Storage capacity of each storage node 150 is broadcast, andinfluences decisions of how to stripe the data. For maximum storageefficiency, an embodiment can self-configure as wide as possible in thestripe, subject to a predetermined requirement of continued operationwith loss of up to one, or up to two, non-volatile solid state storageunits 152 or storage nodes 150 within the chassis.

FIG. 2B is a block diagram showing a communications interconnect 173 andpower distribution bus 172 coupling multiple storage nodes 150.Referring back to FIG. 2A, the communications interconnect 173 can beincluded in or implemented with the switch fabric 146 in someembodiments. Where multiple storage clusters 161 occupy a rack, thecommunications interconnect 173 can be included in or implemented with atop of rack switch, in some embodiments. As illustrated in FIG. 2B,storage cluster 161 is enclosed within a single chassis 138. Externalport 176 is coupled to storage nodes 150 through communicationsinterconnect 173, while external port 174 is coupled directly to astorage node. External power port 178 is coupled to power distributionbus 172. Storage nodes 150 may include varying amounts and differingcapacities of non-volatile solid state storage 152 as described withreference to FIG. 2A. In addition, one or more storage nodes 150 may bea compute only storage node as illustrated in FIG. 2B. Authorities 168are implemented on the non-volatile solid state storages 152, forexample as lists or other data structures stored in memory. In someembodiments the authorities are stored within the non-volatile solidstate storage 152 and supported by software executing on a controller orother processor of the non-volatile solid state storage 152. In afurther embodiment, authorities 168 are implemented on the storage nodes150, for example as lists or other data structures stored in the memory154 and supported by software executing on the CPU 156 of the storagenode 150. Authorities 168 control how and where data is stored in thenon-volatile solid state storages 152 in some embodiments. This controlassists in determining which type of erasure coding scheme is applied tothe data, and which storage nodes 150 have which portions of the data.Each authority 168 may be assigned to a non-volatile solid state storage152. Each authority may control a range of inode numbers, segmentnumbers, or other data identifiers which are assigned to data by a filesystem, by the storage nodes 150, or by the non-volatile solid statestorage 152, in various embodiments.

Every piece of data, and every piece of metadata, has redundancy in thesystem in some embodiments. In addition, every piece of data and everypiece of metadata has an owner, which may be referred to as anauthority. If that authority is unreachable, for example through failureof a storage node, there is a plan of succession for how to find thatdata or that metadata. In various embodiments, there are redundantcopies of authorities 168. Authorities 168 have a relationship tostorage nodes 150 and non-volatile solid state storage 152 in someembodiments. Each authority 168, covering a range of data segmentnumbers or other identifiers of the data, may be assigned to a specificnon-volatile solid state storage 152. In some embodiments theauthorities 168 for all of such ranges are distributed over thenon-volatile solid state storages 152 of a storage cluster. Each storagenode 150 has a network port that provides access to the non-volatilesolid state storage(s) 152 of that storage node 150. Data can be storedin a segment, which is associated with a segment number and that segmentnumber is an indirection for a configuration of a RAID (redundant arrayof independent disks) stripe in some embodiments. The assignment and useof the authorities 168 thus establishes an indirection to data.Indirection may be referred to as the ability to reference dataindirectly, in this case via an authority 168, in accordance with someembodiments. A segment identifies a set of non-volatile solid statestorage 152 and a local identifier into the set of non-volatile solidstate storage 152 that may contain data. In some embodiments, the localidentifier is an offset into the device and may be reused sequentiallyby multiple segments. In other embodiments the local identifier isunique for a specific segment and never reused. The offsets in thenon-volatile solid state storage 152 are applied to locating data forwriting to or reading from the non-volatile solid state storage 152 (inthe form of a RAID stripe). Data is striped across multiple units ofnon-volatile solid state storage 152, which may include or be differentfrom the non-volatile solid state storage 152 having the authority 168for a particular data segment.

If there is a change in where a particular segment of data is located,e.g., during a data move or a data reconstruction, the authority 168 forthat data segment should be consulted, at that non-volatile solid statestorage 152 or storage node 150 having that authority 168. In order tolocate a particular piece of data, embodiments calculate a hash valuefor a data segment or apply an inode number or a data segment number.The output of this operation points to a non-volatile solid statestorage 152 having the authority 168 for that particular piece of data.In some embodiments there are two stages to this operation. The firststage maps an entity identifier (ID), e.g., a segment number, inodenumber, or directory number to an authority identifier. This mapping mayinclude a calculation such as a hash or a bit mask. The second stage ismapping the authority identifier to a particular non-volatile solidstate storage 152, which may be done through an explicit mapping. Theoperation is repeatable, so that when the calculation is performed, theresult of the calculation repeatably and reliably points to a particularnon-volatile solid state storage 152 having that authority 168. Theoperation may include the set of reachable storage nodes as input. Ifthe set of reachable non-volatile solid state storage units changes theoptimal set changes. In some embodiments, the persisted value is thecurrent assignment (which is always true) and the calculated value isthe target assignment the cluster will attempt to reconfigure towards.This calculation may be used to determine the optimal non-volatile solidstate storage 152 for an authority in the presence of a set ofnon-volatile solid state storage 152 that are reachable and constitutethe same cluster. The calculation also determines an ordered set of peernon-volatile solid state storage 152 that will also record the authorityto non-volatile solid state storage mapping so that the authority may bedetermined even if the assigned non-volatile solid state storage isunreachable. A duplicate or substitute authority 168 may be consulted ifa specific authority 168 is unavailable in some embodiments.

With reference to FIGS. 2A and 2B, two of the many tasks of the CPU 156on a storage node 150 are to break up write data, and reassemble readdata. When the system has determined that data is to be written, theauthority 168 for that data is located as above. When the segment ID fordata is already determined the request to write is forwarded to thenon-volatile solid state storage 152 currently determined to be the hostof the authority 168 determined from the segment. The host CPU 156 ofthe storage node 150, on which the non-volatile solid state storage 152and corresponding authority 168 reside, then breaks up or shards thedata and transmits the data out to various non-volatile solid statestorage 152. The transmitted data is written as a data stripe inaccordance with an erasure coding scheme. In some embodiments, data isrequested to be pulled, and in other embodiments, data is pushed. Inreverse, when data is read, the authority 168 for the segment IDcontaining the data is located as described above. The host CPU 156 ofthe storage node 150 on which the non-volatile solid state storage 152and corresponding authority 168 reside requests the data from thenon-volatile solid state storage and corresponding storage nodes pointedto by the authority. In some embodiments the data is read from flashstorage as a data stripe. The host CPU 156 of storage node 150 thenreassembles the read data, correcting any errors (if present) accordingto the appropriate erasure coding scheme, and forwards the reassembleddata to the network. In further embodiments, some or all of these taskscan be handled in the non-volatile solid state storage 152. In someembodiments, the segment host requests the data be sent to storage node150 by requesting pages from storage and then sending the data to thestorage node making the original request.

In some systems, for example in UNIX-style file systems, data is handledwith an index node or inode, which specifies a data structure thatrepresents an object in a file system. The object could be a file or adirectory, for example. Metadata may accompany the object, as attributessuch as permission data and a creation timestamp, among otherattributes. A segment number could be assigned to all or a portion ofsuch an object in a file system. In other systems, data segments arehandled with a segment number assigned elsewhere. For purposes ofdiscussion, the unit of distribution is an entity, and an entity can bea file, a directory or a segment. That is, entities are units of data ormetadata stored by a storage system. Entities are grouped into setscalled authorities. Each authority has an authority owner, which is astorage node that has the exclusive right to update the entities in theauthority. In other words, a storage node contains the authority, andthat the authority, in turn, contains entities.

A segment is a logical container of data in accordance with someembodiments. A segment is an address space between medium address spaceand physical flash locations, i.e., the data segment number, are in thisaddress space. Segments may also contain meta-data, which enable dataredundancy to be restored (rewritten to different flash locations ordevices) without the involvement of higher level software. In oneembodiment, an internal format of a segment contains client data andmedium mappings to determine the position of that data. Each datasegment is protected, e.g., from memory and other failures, by breakingthe segment into a number of data and parity shards, where applicable.The data and parity shards are distributed, i.e., striped, acrossnon-volatile solid state storage 152 coupled to the host CPUs 156 (SeeFIGS. 2E and 2G) in accordance with an erasure coding scheme. Usage ofthe term segments refers to the container and its place in the addressspace of segments in some embodiments. Usage of the term stripe refersto the same set of shards as a segment and includes how the shards aredistributed along with redundancy or parity information in accordancewith some embodiments.

A series of address-space transformations takes place across an entirestorage system. At the top are the directory entries (file names) whichlink to an inode. Inodes point into medium address space, where data islogically stored. Medium addresses may be mapped through a series ofindirect mediums to spread the load of large files, or implement dataservices like deduplication or snapshots. Medium addresses may be mappedthrough a series of indirect mediums to spread the load of large files,or implement data services like deduplication or snapshots. Segmentaddresses are then translated into physical flash locations. Physicalflash locations have an address range bounded by the amount of flash inthe system in accordance with some embodiments. Medium addresses andsegment addresses are logical containers, and in some embodiments use a128 bit or larger identifier so as to be practically infinite, with alikelihood of reuse calculated as longer than the expected life of thesystem. Addresses from logical containers are allocated in ahierarchical fashion in some embodiments. Initially, each non-volatilesolid state storage unit 152 may be assigned a range of address space.Within this assigned range, the non-volatile solid state storage 152 isable to allocate addresses without synchronization with othernon-volatile solid state storage 152.

Data and metadata is stored by a set of underlying storage layouts thatare optimized for varying workload patterns and storage devices. Theselayouts incorporate multiple redundancy schemes, compression formats andindex algorithms. Some of these layouts store information aboutauthorities and authority masters, while others store file metadata andfile data. The redundancy schemes include error correction codes thattolerate corrupted bits within a single storage device (such as a NANDflash chip), erasure codes that tolerate the failure of multiple storagenodes, and replication schemes that tolerate data center or regionalfailures. In some embodiments, low density parity check (‘LDPC’) code isused within a single storage unit. Reed-Solomon encoding is used withina storage cluster, and mirroring is used within a storage grid in someembodiments. Metadata may be stored using an ordered log structuredindex (such as a Log Structured Merge Tree), and large data may not bestored in a log structured layout.

In order to maintain consistency across multiple copies of an entity,the storage nodes agree implicitly on two things through calculations:(1) the authority that contains the entity, and (2) the storage nodethat contains the authority. The assignment of entities to authoritiescan be done by pseudo randomly assigning entities to authorities, bysplitting entities into ranges based upon an externally produced key, orby placing a single entity into each authority. Examples of pseudorandomschemes are linear hashing and the Replication Under Scalable Hashing(‘RUSH’) family of hashes, including Controlled Replication UnderScalable Hashing (‘CRUSH’). In some embodiments, pseudo-randomassignment is utilized only for assigning authorities to nodes becausethe set of nodes can change. The set of authorities cannot change so anysubjective function may be applied in these embodiments. Some placementschemes automatically place authorities on storage nodes, while otherplacement schemes rely on an explicit mapping of authorities to storagenodes. In some embodiments, a pseudorandom scheme is utilized to mapfrom each authority to a set of candidate authority owners. Apseudorandom data distribution function related to CRUSH may assignauthorities to storage nodes and create a list of where the authoritiesare assigned. Each storage node has a copy of the pseudorandom datadistribution function, and can arrive at the same calculation fordistributing, and later finding or locating an authority. Each of thepseudorandom schemes requires the reachable set of storage nodes asinput in some embodiments in order to conclude the same target nodes.Once an entity has been placed in an authority, the entity may be storedon physical devices so that no expected failure will lead to unexpecteddata loss. In some embodiments, rebalancing algorithms attempt to storethe copies of all entities within an authority in the same layout and onthe same set of machines.

Examples of expected failures include device failures, stolen machines,datacenter fires, and regional disasters, such as nuclear or geologicalevents. Different failures lead to different levels of acceptable dataloss. In some embodiments, a stolen storage node impacts neither thesecurity nor the reliability of the system, while depending on systemconfiguration, a regional event could lead to no loss of data, a fewseconds or minutes of lost updates, or even complete data loss.

In the embodiments, the placement of data for storage redundancy isindependent of the placement of authorities for data consistency. Insome embodiments, storage nodes that contain authorities do not containany persistent storage. Instead, the storage nodes are connected tonon-volatile solid state storage units that do not contain authorities.The communications interconnect between storage nodes and non-volatilesolid state storage units consists of multiple communicationtechnologies and has non-uniform performance and fault tolerancecharacteristics. In some embodiments, as mentioned above, non-volatilesolid state storage units are connected to storage nodes via PCIexpress, storage nodes are connected together within a single chassisusing Ethernet backplane, and chassis are connected together to form astorage cluster. Storage clusters are connected to clients usingEthernet or fiber channel in some embodiments. If multiple storageclusters are configured into a storage grid, the multiple storageclusters are connected using the Internet or other long-distancenetworking links, such as a “metro scale” link or private link that doesnot traverse the internet.

Authority owners have the exclusive right to modify entities, to migrateentities from one non-volatile solid state storage unit to anothernon-volatile solid state storage unit, and to add and remove copies ofentities. This allows for maintaining the redundancy of the underlyingdata. When an authority owner fails, is going to be decommissioned, oris overloaded, the authority is transferred to a new storage node.Transient failures make it non-trivial to ensure that all non-faultymachines agree upon the new authority location. The ambiguity thatarises due to transient failures can be achieved automatically by aconsensus protocol such as Paxos, hot-warm failover schemes, via manualintervention by a remote system administrator, or by a local hardwareadministrator (such as by physically removing the failed machine fromthe cluster, or pressing a button on the failed machine). In someembodiments, a consensus protocol is used, and failover is automatic. Iftoo many failures or replication events occur in too short a timeperiod, the system goes into a self-preservation mode and haltsreplication and data movement activities until an administratorintervenes in accordance with some embodiments.

As authorities are transferred between storage nodes and authorityowners update entities in their authorities, the system transfersmessages between the storage nodes and non-volatile solid state storageunits. With regard to persistent messages, messages that have differentpurposes are of different types. Depending on the type of the message,the system maintains different ordering and durability guarantees. Asthe persistent messages are being processed, the messages aretemporarily stored in multiple durable and non-durable storage hardwaretechnologies. In some embodiments, messages are stored in RAM, NVRAM andon NAND flash devices, and a variety of protocols are used in order tomake efficient use of each storage medium. Latency-sensitive clientrequests may be persisted in replicated NVRAM, and then later NAND,while background rebalancing operations are persisted directly to NAND.

Persistent messages are persistently stored prior to being transmitted.This allows the system to continue to serve client requests despitefailures and component replacement. Although many hardware componentscontain unique identifiers that are visible to system administrators,manufacturer, hardware supply chain and ongoing monitoring qualitycontrol infrastructure, applications running on top of theinfrastructure address virtualize addresses. These virtualized addressesdo not change over the lifetime of the storage system, regardless ofcomponent failures and replacements. This allows each component of thestorage system to be replaced over time without reconfiguration ordisruptions of client request processing, i.e., the system supportsnon-disruptive upgrades.

In some embodiments, the virtualized addresses are stored withsufficient redundancy. A continuous monitoring system correlateshardware and software status and the hardware identifiers. This allowsdetection and prediction of failures due to faulty components andmanufacturing details. The monitoring system also enables the proactivetransfer of authorities and entities away from impacted devices beforefailure occurs by removing the component from the critical path in someembodiments.

FIG. 2C is a multiple level block diagram, showing contents of a storagenode 150 and contents of a non-volatile solid state storage 152 of thestorage node 150. Data is communicated to and from the storage node 150by a network interface controller (‘NIC’) 202 in some embodiments. Eachstorage node 150 has a CPU 156, and one or more non-volatile solid statestorage 152, as discussed above. Moving down one level in FIG. 2C, eachnon-volatile solid state storage 152 has a relatively fast non-volatilesolid state memory, such as nonvolatile random access memory (‘NVRAM’)204, and flash memory 206. In some embodiments, NVRAM 204 may be acomponent that does not require program/erase cycles (DRAM, MRAM, PCM),and can be a memory that can support being written vastly more oftenthan the memory is read from. Moving down another level in FIG. 2C, theNVRAM 204 is implemented in one embodiment as high speed volatilememory, such as dynamic random access memory (DRAM) 216, backed up byenergy reserve 218. Energy reserve 218 provides sufficient electricalpower to keep the DRAM 216 powered long enough for contents to betransferred to the flash memory 206 in the event of power failure. Insome embodiments, energy reserve 218 is a capacitor, super-capacitor,battery, or other device, that supplies a suitable supply of energysufficient to enable the transfer of the contents of DRAM 216 to astable storage medium in the case of power loss. The flash memory 206 isimplemented as multiple flash dies 222, which may be referred to aspackages of flash dies 222 or an array of flash dies 222. It should beappreciated that the flash dies 222 could be packaged in any number ofways, with a single die per package, multiple dies per package (i.e.multichip packages), in hybrid packages, as bare dies on a printedcircuit board or other substrate, as encapsulated dies, etc. In theembodiment shown, the non-volatile solid state storage 152 has acontroller 212 or other processor, and an input output (I/O) port 210coupled to the controller 212. I/O port 210 is coupled to the CPU 156and/or the network interface controller 202 of the flash storage node150. Flash input output (I/O) port 220 is coupled to the flash dies 222,and a direct memory access unit (DMA) 214 is coupled to the controller212, the DRAM 216 and the flash dies 222. In the embodiment shown, theI/O port 210, controller 212, DMA unit 214 and flash I/O port 220 areimplemented on a programmable logic device (‘PLD’) 208, e.g., a fieldprogrammable gate array (FPGA). In this embodiment, each flash die 222has pages, organized as sixteen kB (kilobyte) pages 224, and a register226 through which data can be written to or read from the flash die 222.In further embodiments, other types of solid-state memory are used inplace of, or in addition to flash memory illustrated within flash die222.

Storage clusters 161, in various embodiments as disclosed herein, can becontrasted with storage arrays in general. The storage nodes 150 arepart of a collection that creates the storage cluster 161. Each storagenode 150 owns a slice of data and computing required to provide thedata. Multiple storage nodes 150 cooperate to store and retrieve thedata. Storage memory or storage devices, as used in storage arrays ingeneral, are less involved with processing and manipulating the data.Storage memory or storage devices in a storage array receive commands toread, write, or erase data. The storage memory or storage devices in astorage array are not aware of a larger system in which they areembedded, or what the data means. Storage memory or storage devices instorage arrays can include various types of storage memory, such as RAM,solid state drives, hard disk drives, etc. The storage units 152described herein have multiple interfaces active simultaneously andserving multiple purposes. In some embodiments, some of thefunctionality of a storage node 150 is shifted into a storage unit 152,transforming the storage unit 152 into a combination of storage unit 152and storage node 150. Placing computing (relative to storage data) intothe storage unit 152 places this computing closer to the data itself.The various system embodiments have a hierarchy of storage node layerswith different capabilities. By contrast, in a storage array, acontroller owns and knows everything about all of the data that thecontroller manages in a shelf or storage devices. In a storage cluster161, as described herein, multiple controllers in multiple storage units152 and/or storage nodes 150 cooperate in various ways (e.g., forerasure coding, data sharding, metadata communication and redundancy,storage capacity expansion or contraction, data recovery, and so on).

FIG. 2D shows a storage server environment, which uses embodiments ofthe storage nodes 150 and storage units 152 of FIGS. 2A-C. In thisversion, each storage unit 152 has a processor such as controller 212(see FIG. 2C), an FPGA (field programmable gate array), flash memory206, and NVRAM 204 (which is super-capacitor backed DRAM 216, see FIGS.2B and 2C) on a PCIe (peripheral component interconnect express) boardin a chassis 138 (see FIG. 2A). The storage unit 152 may be implementedas a single board containing storage, and may be the largest tolerablefailure domain inside the chassis. In some embodiments, up to twostorage units 152 may fail and the device will continue with no dataloss.

The physical storage is divided into named regions based on applicationusage in some embodiments. The NVRAM 204 is a contiguous block ofreserved memory in the storage unit 152 DRAM 216, and is backed by NANDflash. NVRAM 204 is logically divided into multiple memory regionswritten for two as spool (e.g., spool_region). Space within the NVRAM204 spools is managed by each authority 168 independently. Each deviceprovides an amount of storage space to each authority 168. Thatauthority 168 further manages lifetimes and allocations within thatspace. Examples of a spool include distributed transactions or notions.When the primary power to a storage unit 152 fails, onboardsuper-capacitors provide a short duration of power hold up. During thisholdup interval, the contents of the NVRAM 204 are flushed to flashmemory 206. On the next power-on, the contents of the NVRAM 204 arerecovered from the flash memory 206.

As for the storage unit controller, the responsibility of the logical“controller” is distributed across each of the blades containingauthorities 168. This distribution of logical control is shown in FIG.2D as a host controller 242, mid-tier controller 244 and storage unitcontroller(s) 246. Management of the control plane and the storage planeare treated independently, although parts may be physically co-locatedon the same blade. Each authority 168 effectively serves as anindependent controller. Each authority 168 provides its own data andmetadata structures, its own background workers, and maintains its ownlifecycle.

FIG. 2E is a blade 252 hardware block diagram, showing a control plane254, compute and storage planes 256, 258, and authorities 168interacting with underlying physical resources, using embodiments of thestorage nodes 150 and storage units 152 of FIGS. 2A-C in the storageserver environment of FIG. 2D. The control plane 254 is partitioned intoa number of authorities 168 which can use the compute resources in thecompute plane 256 to run on any of the blades 252. The storage plane 258is partitioned into a set of devices, each of which provides access toflash 206 and NVRAM 204 resources. In one embodiment, the compute plane256 may perform the operations of a storage array controller, asdescribed herein, on one or more devices of the storage plane 258 (e.g.,a storage array).

In the compute and storage planes 256, 258 of FIG. 2E, the authorities168 interact with the underlying physical resources (i.e., devices).From the point of view of an authority 168, its resources are stripedover all of the physical devices. From the point of view of a device, itprovides resources to all authorities 168, irrespective of where theauthorities happen to run. Each authority 168 has allocated or has beenallocated one or more partitions 260 of storage memory in the storageunits 152, e.g. partitions 260 in flash memory 206 and NVRAM 204. Eachauthority 168 uses those allocated partitions 260 that belong to it, forwriting or reading user data. Authorities can be associated withdiffering amounts of physical storage of the system. For example, oneauthority 168 could have a larger number of partitions 260 or largersized partitions 260 in one or more storage units 152 than one or moreother authorities 168.

FIG. 2F depicts elasticity software layers in blades 252 of a storagecluster, in accordance with some embodiments. In the elasticitystructure, elasticity software is symmetric, i.e., each blade's computemodule 270 runs the three identical layers of processes depicted in FIG.2F. Storage managers 274 execute read and write requests from otherblades 252 for data and metadata stored in local storage unit 152 NVRAM204 and flash 206. Authorities 168 fulfill client requests by issuingthe necessary reads and writes to the blades 252 on whose storage units152 the corresponding data or metadata resides. Endpoints 272 parseclient connection requests received from switch fabric 146 supervisorysoftware, relay the client connection requests to the authorities 168responsible for fulfillment, and relay the authorities' 168 responses toclients. The symmetric three-layer structure enables the storagesystem's high degree of concurrency. Elasticity scales out efficientlyand reliably in these embodiments. In addition, elasticity implements aunique scale-out technique that balances work evenly across allresources regardless of client access pattern, and maximizes concurrencyby eliminating much of the need for inter-blade coordination thattypically occurs with conventional distributed locking.

Still referring to FIG. 2F, authorities 168 running in the computemodules 270 of a blade 252 perform the internal operations required tofulfill client requests. One feature of elasticity is that authorities168 are stateless, i.e., they cache active data and metadata in theirown blades' 252 DRAMs for fast access, but the authorities store everyupdate in their NVRAM 204 partitions on three separate blades 252 untilthe update has been written to flash 206. All the storage system writesto NVRAM 204 are in triplicate to partitions on three separate blades252 in some embodiments. With triple-mirrored NVRAM 204 and persistentstorage protected by parity and Reed-Solomon RAID checksums, the storagesystem can survive concurrent failure of two blades 252 with no loss ofdata, metadata, or access to either.

Because authorities 168 are stateless, they can migrate between blades252. Each authority 168 has a unique identifier. NVRAM 204 and flash 206partitions are associated with authorities' 168 identifiers, not withthe blades 252 on which they are running in some. Thus, when anauthority 168 migrates, the authority 168 continues to manage the samestorage partitions from its new location. When a new blade 252 isinstalled in an embodiment of the storage cluster, the systemautomatically rebalances load by: partitioning the new blade's 252storage for use by the system's authorities 168, migrating selectedauthorities 168 to the new blade 252, starting endpoints 272 on the newblade 252 and including them in the switch fabric's 146 clientconnection distribution algorithm.

From their new locations, migrated authorities 168 persist the contentsof their NVRAM 204 partitions on flash 206, process read and writerequests from other authorities 168, and fulfill the client requeststhat endpoints 272 direct to them. Similarly, if a blade 252 fails or isremoved, the system redistributes its authorities 168 among the system'sremaining blades 252. The redistributed authorities 168 continue toperform their original functions from their new locations.

FIG. 2G depicts authorities 168 and storage resources in blades 252 of astorage cluster, in accordance with some embodiments. Each authority 168is exclusively responsible for a partition of the flash 206 and NVRAM204 on each blade 252. The authority 168 manages the content andintegrity of its partitions independently of other authorities 168.Authorities 168 compress incoming data and preserve it temporarily intheir NVRAM 204 partitions, and then consolidate, RAID-protect, andpersist the data in segments of the storage in their flash 206partitions. As the authorities 168 write data to flash 206, storagemanagers 274 perform the necessary flash translation to optimize writeperformance and maximize media longevity. In the background, authorities168 “garbage collect,” or reclaim space occupied by data that clientshave made obsolete by overwriting the data. It should be appreciatedthat since authorities' 168 partitions are disjoint, there is no needfor distributed locking to execute client and writes or to performbackground functions.

The embodiments described herein may utilize various software,communication and/or networking protocols. In addition, theconfiguration of the hardware and/or software may be adjusted toaccommodate various protocols. For example, the embodiments may utilizeActive Directory, which is a database based system that providesauthentication, directory, policy, and other services in a WINDOWS™environment. In these embodiments, LDAP (Lightweight Directory AccessProtocol) is one example application protocol for querying and modifyingitems in directory service providers such as Active Directory. In someembodiments, a network lock manager (‘NLM’) is utilized as a facilitythat works in cooperation with the Network File System (‘NFS’) toprovide a System V style of advisory file and record locking over anetwork. The Server Message Block (‘SMB’) protocol, one version of whichis also known as Common Internet File System (‘CIFS’), may be integratedwith the storage systems discussed herein. SMP operates as anapplication-layer network protocol typically used for providing sharedaccess to files, printers, and serial ports and miscellaneouscommunications between nodes on a network. SMB also provides anauthenticated inter-process communication mechanism. AMAZON™ S3 (SimpleStorage Service) is a web service offered by Amazon Web Services, andthe systems described herein may interface with Amazon S3 through webservices interfaces (REST (representational state transfer), SOAP(simple object access protocol), and BitTorrent). A RESTful API(application programming interface) breaks down a transaction to createa series of small modules. Each module addresses a particular underlyingpart of the transaction. The control or permissions provided with theseembodiments, especially for object data, may include utilization of anaccess control list (‘ACL’). The ACL is a list of permissions attachedto an object and the ACL specifies which users or system processes aregranted access to objects, as well as what operations are allowed ongiven objects. The systems may utilize Internet Protocol version 6(‘IPv6’), as well as IPv4, for the communications protocol that providesan identification and location system for computers on networks androutes traffic across the Internet. The routing of packets betweennetworked systems may include Equal-cost multi-path routing (‘ECMP’),which is a routing strategy where next-hop packet forwarding to a singledestination can occur over multiple “best paths” which tie for top placein routing metric calculations. Multi-path routing can be used inconjunction with most routing protocols, because it is a per-hopdecision limited to a single router. The software may supportMulti-tenancy, which is an architecture in which a single instance of asoftware application serves multiple customers. Each customer may bereferred to as a tenant. Tenants may be given the ability to customizesome parts of the application, but may not customize the application'scode, in some embodiments. The embodiments may maintain audit logs. Anaudit log is a document that records an event in a computing system. Inaddition to documenting what resources were accessed, audit log entriestypically include destination and source addresses, a timestamp, anduser login information for compliance with various regulations. Theembodiments may support various key management policies, such asencryption key rotation. In addition, the system may support dynamicroot passwords or some variation dynamically changing passwords.

FIG. 3A sets forth a diagram of a storage system 306 that is coupled fordata communications with a cloud services provider 302 in accordancewith some embodiments of the present disclosure. Although depicted inless detail, the storage system 306 depicted in FIG. 3A may be similarto the storage systems described above with reference to FIGS. 1A-1D andFIGS. 2A-2G. In some embodiments, the storage system 306 depicted inFIG. 3A may be embodied as a storage system that includes imbalancedactive/active controllers, as a storage system that includes balancedactive/active controllers, as a storage system that includesactive/active controllers where less than all of each controller'sresources are utilized such that each controller has reserve resourcesthat may be used to support failover, as a storage system that includesfully active/active controllers, as a storage system that includesdataset-segregated controllers, as a storage system that includesdual-layer architectures with front-end controllers and back-endintegrated storage controllers, as a storage system that includesscale-out clusters of dual-controller arrays, as well as combinations ofsuch embodiments.

In the example depicted in FIG. 3A, the storage system 306 is coupled tothe cloud services provider 302 via a data communications link 304. Thedata communications link 304 may be embodied as a dedicated datacommunications link, as a data communications pathway that is providedthrough the use of one or data communications networks such as a widearea network (‘WAN’) or local area network (‘LAN’), or as some othermechanism capable of transporting digital information between thestorage system 306 and the cloud services provider 302. Such a datacommunications link 304 may be fully wired, fully wireless, or someaggregation of wired and wireless data communications pathways. In suchan example, digital information may be exchanged between the storagesystem 306 and the cloud services provider 302 via the datacommunications link 304 using one or more data communications protocols.For example, digital information may be exchanged between the storagesystem 306 and the cloud services provider 302 via the datacommunications link 304 using the handheld device transfer protocol(‘HDTP’), hypertext transfer protocol (‘HTTP’), internet protocol(‘IP’), real-time transfer protocol (‘RTP’), transmission controlprotocol (‘TCP’), user datagram protocol (‘UDP’), wireless applicationprotocol (‘WAP’), or other protocol.

For further explanation, FIG. 3B sets forth a diagram of a storagesystem 306 in accordance with some embodiments of the presentdisclosure. Although depicted in less detail, the storage system 306depicted in FIG. 3B may be similar to the storage systems describedabove with reference to FIGS. 1A-1D and FIGS. 2A-2G as the storagesystem may include many of the components described above.

The storage system 306 depicted in FIG. 3B may include storage resources308, which may be embodied in many forms. For example, in someembodiments the storage resources 308 can include nano-RAM or anotherform of nonvolatile random access memory that utilizes carbon nanotubesdeposited on a substrate. In some embodiments, the storage resources 308may include 3D crosspoint non-volatile memory in which bit storage isbased on a change of bulk resistance, in conjunction with a stackablecross-gridded data access array. In some embodiments, the storageresources 308 may include flash memory, including single-level cell(‘SLC’) NAND flash, multi-level cell (‘MLC’) NAND flash, triple-levelcell (‘TLC’) NAND flash, quad-level cell (‘QLC’) NAND flash, and others.In some embodiments, the storage resources 308 may include non-volatilemagnetoresistive random-access memory (‘MRAM’), including spin transfertorque (‘STT’) MRAM, in which data is stored through the use of magneticstorage elements. In some embodiments, the example storage resources 308may include non-volatile phase-change memory (‘PCM’) that may have theability to hold multiple bits in a single cell as cells can achieve anumber of distinct intermediary states. In some embodiments, the storageresources 308 may include quantum memory that allows for the storage andretrieval of photonic quantum information. In some embodiments, theexample storage resources 308 may include resistive random-access memory(‘ReRAM’) in which data is stored by changing the resistance across adielectric solid-state material. In some embodiments, the storageresources 308 may include storage class memory (‘SCM’) in whichsolid-state nonvolatile memory may be manufactured at a high densityusing some combination of sub-lithographic patterning techniques,multiple bits per cell, multiple layers of devices, and so on. Readerswill appreciate that other forms of computer memories and storagedevices may be utilized by the storage systems described above,including DRAM, SRAM, EEPROM, universal memory, and many others. Thestorage resources 308 depicted in FIG. 3A may be embodied in a varietyof form factors, including but not limited to, dual in-line memorymodules (‘DIMMs’), non-volatile dual in-line memory modules (‘NVDIMMs’),M.2, U.2, and others.

The storage resources 308 depicted in FIG. 3A may include various formsof storage-class memory (‘SCM’). SCM may effectively treat fast,non-volatile memory (e.g., NAND flash) as an extension of DRAM such thatan entire dataset may be treated as an in-memory dataset that residesentirely in DRAM. SCM may include non-volatile media such as, forexample, NAND flash. Such NAND flash may be accessed utilizing NVMe thatcan use the PCIe bus as its transport, providing for relatively lowaccess latencies compared to older protocols. In fact, the networkprotocols used for SSDs in all-flash arrays can include NVMe usingEthernet (ROCE, NVME TCP), Fibre Channel (NVMe FC), InfiniBand (iWARP),and others that make it possible to treat fast, non-volatile memory asan extension of DRAM. In view of the fact that DRAM is oftenbyte-addressable and fast, non-volatile memory such as NAND flash isblock-addressable, a controller software/hardware stack may be needed toconvert the block data to the bytes that are stored in the media.Examples of media and software that may be used as SCM can include, forexample, 3D XPoint, Intel Memory Drive Technology, Samsung's Z-SSD, andothers.

The example storage system 306 depicted in FIG. 3B may implement avariety of storage architectures. For example, storage systems inaccordance with some embodiments of the present disclosure may utilizeblock storage where data is stored in blocks, and each block essentiallyacts as an individual hard drive. Storage systems in accordance withsome embodiments of the present disclosure may utilize object storage,where data is managed as objects. Each object may include the dataitself, a variable amount of metadata, and a globally unique identifier,where object storage can be implemented at multiple levels (e.g., devicelevel, system level, interface level). Storage systems in accordancewith some embodiments of the present disclosure utilize file storage inwhich data is stored in a hierarchical structure. Such data may be savedin files and folders, and presented to both the system storing it andthe system retrieving it in the same format.

The example storage system 306 depicted in FIG. 3B may be embodied as astorage system in which additional storage resources can be addedthrough the use of a scale-up model, additional storage resources can beadded through the use of a scale-out model, or through some combinationthereof. In a scale-up model, additional storage may be added by addingadditional storage devices. In a scale-out model, however, additionalstorage nodes may be added to a cluster of storage nodes, where suchstorage nodes can include additional processing resources, additionalnetworking resources, and so on.

The storage system 306 depicted in FIG. 3B also includes communicationsresources 310 that may be useful in facilitating data communicationsbetween components within the storage system 306, as well as datacommunications between the storage system 306 and computing devices thatare outside of the storage system 306. The communications resources 310may be configured to utilize a variety of different protocols and datacommunication fabrics to facilitate data communications betweencomponents within the storage systems as well as computing devices thatare outside of the storage system. For example, the communicationsresources 310 can include fibre channel (‘FC’) technologies such as FCfabrics and FC protocols that can transport SCSI commands over FCnetworks. The communications resources 310 can also include FC overethernet (‘FCoE’) technologies through which FC frames are encapsulatedand transmitted over Ethernet networks. The communications resources 310can also include InfiniBand (‘IB’) technologies in which a switchedfabric topology is utilized to facilitate transmissions between channeladapters. The communications resources 310 can also include NVM Express(‘NVMe’) technologies and NVMe over fabrics (‘NVMeoF’) technologiesthrough which non-volatile storage media attached via a PCI express(‘PCIe’) bus may be accessed. The communications resources 310 can alsoinclude mechanisms for accessing storage resources 308 within thestorage system 306 utilizing serial attached SCSI (‘SAS’), serial ATA(‘SATA’) bus interfaces for connecting storage resources 308 within thestorage system 306 to host bus adapters within the storage system 306,internet small computer systems interface (‘iSCSI’) technologies toprovide block-level access to storage resources 308 within the storagesystem 306, and other communications resources that that may be usefulin facilitating data communications between components within thestorage system 306, as well as data communications between the storagesystem 306 and computing devices that are outside of the storage system306.

The storage system 306 depicted in FIG. 3B also includes processingresources 312 that may be useful in useful in executing computer programinstructions and performing other computational tasks within the storagesystem 306. The processing resources 312 may include one or moreapplication-specific integrated circuits (‘ASICs’) that are customizedfor some particular purpose as well as one or more central processingunits (‘CPUs’). The processing resources 312 may also include one ormore digital signal processors (‘DSPs’), one or more field-programmablegate arrays (‘FPGAs’), one or more systems on a chip (‘SoCs’), or otherform of processing resources 312. The storage system 306 may utilize thestorage resources 312 to perform a variety of tasks including, but notlimited to, supporting the execution of software resources 314 that willbe described in greater detail below.

The storage system 306 depicted in FIG. 3B also includes softwareresources 314 that, when executed by processing resources 312 within thestorage system 306, may perform various tasks. The software resources314 may include, for example, one or more modules of computer programinstructions that when executed by processing resources 312 within thestorage system 306 are useful in carrying out various data protectiontechniques to preserve the integrity of data that is stored within thestorage systems. Readers will appreciate that such data protectiontechniques may be carried out, for example, by system software executingon computer hardware within the storage system, by a cloud servicesprovider, or in other ways. Such data protection techniques can include,for example, data archiving techniques that cause data that is no longeractively used to be moved to a separate storage device or separatestorage system for long-term retention, data backup techniques throughwhich data stored in the storage system may be copied and stored in adistinct location to avoid data loss in the event of equipment failureor some other form of catastrophe with the storage system, datareplication techniques through which data stored in the storage systemis replicated to another storage system such that the data may beaccessible via multiple storage systems, data snapshotting techniquesthrough which the state of data within the storage system is captured atvarious points in time, data and database cloning techniques throughwhich duplicate copies of data and databases may be created, and otherdata protection techniques. Through the use of such data protectiontechniques, business continuity and disaster recovery objectives may bemet as a failure of the storage system may not result in the loss ofdata stored in the storage system.

The software resources 314 may also include software that is useful inimplementing software-defined storage (‘SDS’). In such an example, thesoftware resources 314 may include one or more modules of computerprogram instructions that, when executed, are useful in policy-basedprovisioning and management of data storage that is independent of theunderlying hardware. Such software resources 314 may be useful inimplementing storage virtualization to separate the storage hardwarefrom the software that manages the storage hardware.

The software resources 314 may also include software that is useful infacilitating and optimizing I/O operations that are directed to thestorage resources 308 in the storage system 306. For example, thesoftware resources 314 may include software modules that perform carryout various data reduction techniques such as, for example, datacompression, data deduplication, and others. The software resources 314may include software modules that intelligently group together I/Ooperations to facilitate better usage of the underlying storage resource308, software modules that perform data migration operations to migratefrom within a storage system, as well as software modules that performother functions. Such software resources 314 may be embodied as one ormore software containers or in many other ways.

Readers will appreciate that the presence of such software resources 314may provide for an improved user experience of the storage system 306,an expansion of functionality supported by the storage system 306, andmany other benefits. Consider the specific example of the softwareresources 314 carrying out data backup techniques through which datastored in the storage system may be copied and stored in a distinctlocation to avoid data loss in the event of equipment failure or someother form of catastrophe. In such an example, the systems describedherein may more reliably (and with less burden placed on the user)perform backup operations relative to interactive backup managementsystems that require high degrees of user interactivity, offer lessrobust automation and feature sets, and so on.

For further explanation, FIG. 3C sets forth an example of a cloud-basedstorage system 318 in accordance with some embodiments of the presentdisclosure. In the example depicted in FIG. 3C, the cloud-based storagesystem 318 is created entirely in a cloud computing environment 316 suchas, for example, Amazon Web Services (‘AWS’), Microsoft Azure, GoogleCloud Platform, IBM Cloud, Oracle Cloud, and others. The cloud-basedstorage system 318 may be used to provide services similar to theservices that may be provided by the storage systems described above.For example, the cloud-based storage system 318 may be used to provideblock storage services to users of the cloud-based storage system 318,the cloud-based storage system 318 may be used to provide storageservices to users of the cloud-based storage system 318 through the useof solid-state storage, and so on.

The cloud-based storage system 318 depicted in FIG. 3C includes twocloud computing instances 320, 322 that each are used to support theexecution of a storage controller application 324, 326. The cloudcomputing instances 320, 322 may be embodied, for example, as instancesof cloud computing resources (e.g., virtual machines) that may beprovided by the cloud computing environment 316 to support the executionof software applications such as the storage controller application 324,326. In one embodiment, the cloud computing instances 320, 322 may beembodied as Amazon Elastic Compute Cloud (‘EC2’) instances. In such anexample, an Amazon Machine Image (‘AMI’) that includes the storagecontroller application 324, 326 may be booted to create and configure avirtual machine that may execute the storage controller application 324,326.

In the example method depicted in FIG. 3C, the storage controllerapplication 324, 326 may be embodied as a module of computer programinstructions that, when executed, carries out various storage tasks. Forexample, the storage controller application 324, 326 may be embodied asa module of computer program instructions that, when executed, carriesout the same tasks as the controllers 110A, 110B in FIG. 1A describedabove such as writing data received from the users of the cloud-basedstorage system 318 to the cloud-based storage system 318, erasing datafrom the cloud-based storage system 318, retrieving data from thecloud-based storage system 318 and providing such data to users of thecloud-based storage system 318, monitoring and reporting of diskutilization and performance, performing redundancy operations, such asRAID or RAID-like data redundancy operations, compressing data,encrypting data, deduplicating data, and so forth. Readers willappreciate that because there are two cloud computing instances 320, 322that each include the storage controller application 324, 326, in someembodiments one cloud computing instance 320 may operate as the primarycontroller as described above while the other cloud computing instance322 may operate as the secondary controller as described above. In suchan example, in order to save costs, the cloud computing instance 320that operates as the primary controller may be deployed on a relativelyhigh-performance and relatively expensive cloud computing instance whilethe cloud computing instance 322 that operates as the secondarycontroller may be deployed on a relatively low-performance andrelatively inexpensive cloud computing instance. Readers will appreciatethat the storage controller application 324, 326 depicted in FIG. 3C mayinclude identical source code that is executed within different cloudcomputing instances 320, 322.

The cloud-based storage system 318 depicted in FIG. 3C includes cloudcomputing instances 340 a, 340 b, 340 n with local storage 330, 334,338. The cloud computing instances 340 a, 340 b, 340 n depicted in FIG.3C may be embodied, for example, as instances of cloud computingresources that may be provided by the cloud computing environment 316 tosupport the execution of software applications. The cloud computinginstances 340 a, 340 b, 340 n of FIG. 3C may differ from the cloudcomputing instances 320, 322 described above as the cloud computinginstances 340 a, 340 b, 340 n of FIG. 3C have local storage 330, 334,338 resources whereas the cloud computing instances 320, 322 thatsupport the execution of the storage controller application 324, 326need not have local storage resources. The cloud computing instances 340a, 340 b, 340 n with local storage 330, 334, 338 may be embodied, forexample, as EC2 M5 instances that include one or more SSDs, as EC2 R5instances that include one or more SSDs, as EC2 I3 instances thatinclude one or more SSDs, and so on. In some embodiments, the localstorage 330, 334, 338 must be embodied as solid-state storage (e.g.,SSDs) rather than storage that makes use of hard disk drives.

In the example depicted in FIG. 3C, each of the cloud computinginstances 340 a, 340 b, 340 n with local storage 330, 334, 338 caninclude a software daemon 328, 332, 336 that, when executed by a cloudcomputing instance 340 a, 340 b, 340 n can present itself to the storagecontroller applications 324, 326 as if the cloud computing instance 340a, 340 b, 340 n were a physical storage device (e.g., one or more SSDs).In such an example, the software daemon 328, 332, 336 may includecomputer program instructions similar to those that would normally becontained on a storage device such that the storage controllerapplications 324, 326 can send and receive the same commands that astorage controller would send to storage devices. In such a way, thestorage controller applications 324, 326 may include code that isidentical to (or substantially identical to) the code that would beexecuted by the controllers in the storage systems described above. Inthese and similar embodiments, communications between the storagecontroller applications 324, 326 and the cloud computing instances 340a, 340 b, 340 n with local storage 330, 334, 338 may utilize iSCSI, NVMeover TCP, messaging, a custom protocol, or in some other mechanism.

In the example depicted in FIG. 3C, each of the cloud computinginstances 340 a, 340 b, 340 n with local storage 330, 334, 338 may alsobe coupled to block-storage 342, 344, 346 that is offered by the cloudcomputing environment 316. The block-storage 342, 344, 346 that isoffered by the cloud computing environment 316 may be embodied, forexample, as Amazon Elastic Block Store (‘EBS’) volumes.

In the example depicted in FIG. 3C, the cloud computing instances 340 a,340 b, 340 n with local storage 330, 334, 338 may be utilized, by cloudcomputing instances 320, 322 that support the execution of the storagecontroller application 324, 326 to service I/O operations that aredirected to the cloud-based storage system 318. Consider an example inwhich a first cloud computing instance 320 that is executing the storagecontroller application 324 is operating as the primary controller. Insuch an example, the first cloud computing instance 320 that isexecuting the storage controller application 324 may receive (directlyor indirectly via the secondary controller) requests to write data tothe cloud-based storage system 318 from users of the cloud-based storagesystem 318. In such an example, the first cloud computing instance 320that is executing the storage controller application 324 may performvarious tasks such as, for example, deduplicating the data contained inthe request, compressing the data contained in the request, determiningwhere to the write the data contained in the request, and so on, beforeultimately sending a request to write a deduplicated, encrypted, orotherwise possibly updated version of the data to one or more of thecloud computing instances 340 a, 340 b, 340 n with local storage 330,334, 338. Either cloud computing instance 320, 322, in some embodiments,may receive a request to read data from the cloud-based storage system318 and may ultimately send a request to read data to one or more of thecloud computing instances 340 a, 340 b, 340 n with local storage 330,334, 338.

Readers will appreciate that when a request to write data is received bya particular cloud computing instance 340 a, 340 b, 340 n with localstorage 330, 334, 338, the software daemon 328, 332, 336 or some othermodule of computer program instructions that is executing on theparticular cloud computing instance 340 a, 340 b, 340 n may beconfigured to not only write the data to its own local storage 330, 334,338 resources and any appropriate block-storage 342, 344, 346 that areoffered by the cloud computing environment 316, but the software daemon328, 332, 336 or some other module of computer program instructions thatis executing on the particular cloud computing instance 340 a, 340 b,340 n may also be configured to write the data to cloud-based objectstorage 348 that is attached to the particular cloud computing instance340 a, 340 b, 340 n. The cloud-based object storage 348 that is attachedto the particular cloud computing instance 340 a, 340 b, 340 n may beembodied, for example, as Amazon Simple Storage Service (‘S3’) storagethat is accessible by the particular cloud computing instance 340 a, 340b, 340 n. In other embodiments, the cloud computing instances 320, 322that each include the storage controller application 324, 326 mayinitiate the storage of the data in the local storage 330, 334, 338 ofthe cloud computing instances 340 a, 340 b, 340 n and the cloud-basedobject storage 348.

Readers will appreciate that, as described above, the cloud-basedstorage system 318 may be used to provide block storage services tousers of the cloud-based storage system 318. While the local storage330, 334, 338 resources and the block-storage 342, 344, 346 resourcesthat are utilized by the cloud computing instances 340 a, 340 b, 340 nmay support block-level access, the cloud-based object storage 348 thatis attached to the particular cloud computing instance 340 a, 340 b, 340n supports only object-based access. In order to address this, thesoftware daemon 328, 332, 336 or some other module of computer programinstructions that is executing on the particular cloud computinginstance 340 a, 340 b, 340 n may be configured to take blocks of data,package those blocks into objects, and write the objects to thecloud-based object storage 348 that is attached to the particular cloudcomputing instance 340 a, 340 b, 340 n.

The storage systems described above may carry out intelligent databackup techniques through which data stored in the storage system may becopied and stored in a distinct location to avoid data loss in the eventof equipment failure or some other form of catastrophe. For example, thestorage systems described above may be configured to examine each backupto avoid restoring the storage system to an undesirable state. Consideran example in which malware infects the storage system. In such anexample, the storage system may include software resources 314 that canscan each backup to identify backups that were captured before themalware infected the storage system and those backups that were capturedafter the malware infected the storage system. In such an example, thestorage system may restore itself from a backup that does not includethe malware—or at least not restore the portions of a backup thatcontained the malware. In such an example, the storage system mayinclude software resources 314 that can scan each backup to identify thepresences of malware (or a virus, or some other undesirable), forexample, by identifying write operations that were serviced by thestorage system and originated from a network subnet that is suspected tohave delivered the malware, by identifying write operations that wereserviced by the storage system and originated from a user that issuspected to have delivered the malware, by identifying write operationsthat were serviced by the storage system and examining the content ofthe write operation against fingerprints of the malware, and in manyother ways.

Readers will further appreciate that the backups (often in the form ofone or more snapshots) may also be utilized to perform rapid recovery ofthe storage system. Consider an example in which the storage system isinfected with ransomware that locks users out of the storage system. Insuch an example, software resources 314 within the storage system may beconfigured to detect the presence of ransomware and may be furtherconfigured to restore the storage system to a point-in-time, using theretained backups, prior to the point-in-time at which the ransomwareinfected the storage system. In such an example, the presence ofransomware may be explicitly detected through the use of software toolsutilized by the system, through the use of a key (e.g., a USB drive)that is inserted into the storage system, or in a similar way. Likewise,the presence of ransomware may be inferred in response to systemactivity meeting a predetermined fingerprint such as, for example, noreads or writes coming into the system for a predetermined period oftime.

Readers will appreciate that the various components depicted in FIG. 3Bmay be grouped into one or more optimized computing packages asconverged infrastructures. Such converged infrastructures may includepools of computers, storage and networking resources that can be sharedby multiple applications and managed in a collective manner usingpolicy-driven processes. Such converged infrastructures may minimizecompatibility issues between various components within the storagesystem 306 while also reducing various costs associated with theestablishment and operation of the storage system 306. Such convergedinfrastructures may be implemented with a converged infrastructurereference architecture, with standalone appliances, with a softwaredriven hyper-converged approach (e.g., hyper-converged infrastructures),or in other ways.

Readers will appreciate that the storage system 306 depicted in FIG. 3Bmay be useful for supporting various types of software applications. Forexample, the storage system 306 may be useful in supporting artificialintelligence (‘AI’) applications, database applications, DevOpsprojects, electronic design automation tools, event-driven softwareapplications, high performance computing applications, simulationapplications, high-speed data capture and analysis applications, machinelearning applications, media production applications, media servingapplications, picture archiving and communication systems (‘PACS’)applications, software development applications, virtual realityapplications, augmented reality applications, and many other types ofapplications by providing storage resources to such applications.

The storage systems described above may operate to support a widevariety of applications. In view of the fact that the storage systemsinclude compute resources, storage resources, and a wide variety ofother resources, the storage systems may be well suited to supportapplications that are resource intensive such as, for example, AIapplications. Such AI applications may enable devices to perceive theirenvironment and take actions that maximize their chance of success atsome goal. Examples of such AI applications can include IBM Watson,Microsoft Oxford, Google DeepMind, Baidu Minwa, and others. The storagesystems described above may also be well suited to support other typesof applications that are resource intensive such as, for example,machine learning applications. Machine learning applications may performvarious types of data analysis to automate analytical model building.Using algorithms that iteratively learn from data, machine learningapplications can enable computers to learn without being explicitlyprogrammed. One particular area of machine learning is referred to asreinforcement learning, which involves taking suitable actions tomaximize reward in a particular situation. Reinforcement learning may beemployed to find the best possible behavior or path that a particularsoftware application or machine should take in a specific situation.Reinforcement learning differs from other areas of machine learning(e.g., supervised learning, unsupervised learning) in that correctinput/output pairs need not be presented for reinforcement learning andsub-optimal actions need not be explicitly corrected.

In addition to the resources already described, the storage systemsdescribed above may also include graphics processing units (‘GPUs’),occasionally referred to as visual processing unit (‘VPUs’). Such GPUsmay be embodied as specialized electronic circuits that rapidlymanipulate and alter memory to accelerate the creation of images in aframe buffer intended for output to a display device. Such GPUs may beincluded within any of the computing devices that are part of thestorage systems described above, including as one of many individuallyscalable components of a storage system, where other examples ofindividually scalable components of such storage system can includestorage components, memory components, compute components (e.g., CPUs,FPGAs, ASICs), networking components, software components, and others.In addition to GPUs, the storage systems described above may alsoinclude neural network processors (‘NNPs’) for use in various aspects ofneural network processing. Such NNPs may be used in place of (or inaddition to) GPUs and may also be independently scalable.

As described above, the storage systems described herein may beconfigured to support artificial intelligence applications, machinelearning applications, big data analytics applications, and many othertypes of applications. The rapid growth in these sort of applications isbeing driven by three technologies: deep learning (DL), GPU processors,and Big Data. Deep learning is a computing model that makes use ofmassively parallel neural networks inspired by the human brain. Insteadof experts handcrafting software, a deep learning model writes its ownsoftware by learning from lots of examples. A GPU is a modern processorwith thousands of cores, well-suited to run algorithms that looselyrepresent the parallel nature of the human brain.

Advances in deep neural networks have ignited a new wave of algorithmsand tools for data scientists to tap into their data with artificialintelligence (AI). With improved algorithms, larger data sets, andvarious frameworks (including open-source software libraries for machinelearning across a range of tasks), data scientists are tackling new usecases like autonomous driving vehicles, natural language processing andunderstanding, computer vision, machine reasoning, strong AI, and manyothers. Applications of such techniques may include: machine andvehicular object detection, identification and avoidance; visualrecognition, classification and tagging; algorithmic financial tradingstrategy performance management; simultaneous localization and mapping;predictive maintenance of high-value machinery; prevention against cybersecurity threats, expertise automation; image recognition andclassification; question answering; robotics; text analytics(extraction, classification) and text generation and translation; andmany others. Applications of AI techniques has materialized in a widearray of products include, for example, Amazon Echo's speech recognitiontechnology that allows users to talk to their machines, GoogleTranslate™ which allows for machine-based language translation,Spotify's Discover Weekly that provides recommendations on new songs andartists that a user may like based on the user's usage and trafficanalysis, Quill's text generation offering that takes structured dataand turns it into narrative stories, Chatbots that provide real-time,contextually specific answers to questions in a dialog format, and manyothers. Furthermore, AI may impact a wide variety of industries andsectors. For example, AI solutions may be used in healthcare to takeclinical notes, patient files, research data, and other inputs togenerate potential treatment options for doctors to explore. Likewise,AI solutions may be used by retailers to personalize consumerrecommendations based on a person's digital footprint of behaviors,profile data, or other data.

Training deep neural networks, however, requires both high quality inputdata and large amounts of computation. GPUs are massively parallelprocessors capable of operating on large amounts of data simultaneously.When combined into a multi-GPU cluster, a high throughput pipeline maybe required to feed input data from storage to the compute engines. Deeplearning is more than just constructing and training models. There alsoexists an entire data pipeline that must be designed for the scale,iteration, and experimentation necessary for a data science team tosucceed.

Data is the heart of modern AI and deep learning algorithms. Beforetraining can begin, one problem that must be addressed revolves aroundcollecting the labeled data that is crucial for training an accurate AImodel. A full scale AI deployment may be required to continuouslycollect, clean, transform, label, and store large amounts of data.Adding additional high quality data points directly translates to moreaccurate models and better insights. Data samples may undergo a seriesof processing steps including, but not limited to: 1) ingesting the datafrom an external source into the training system and storing the data inraw form, 2) cleaning and transforming the data in a format convenientfor training, including linking data samples to the appropriate label,3) exploring parameters and models, quickly testing with a smallerdataset, and iterating to converge on the most promising models to pushinto the production cluster, 4) executing training phases to selectrandom batches of input data, including both new and older samples, andfeeding those into production GPU servers for computation to updatemodel parameters, and 5) evaluating including using a holdback portionof the data not used in training in order to evaluate model accuracy onthe holdout data. This lifecycle may apply for any type of parallelizedmachine learning, not just neural networks or deep learning. Forexample, standard machine learning frameworks may rely on CPUs insteadof GPUs but the data ingest and training workflows may be the same.Readers will appreciate that a single shared storage data hub creates acoordination point throughout the lifecycle without the need for extradata copies among the ingest, preprocessing, and training stages. Rarelyis the ingested data used for only one purpose, and shared storage givesthe flexibility to train multiple different models or apply traditionalanalytics to the data.

Readers will appreciate that each stage in the AI data pipeline may havevarying requirements from the data hub (e.g., the storage system orcollection of storage systems). Scale-out storage systems must deliveruncompromising performance for all manner of access types andpatterns—from small, metadata-heavy to large files, from random tosequential access patterns, and from low to high concurrency. Thestorage systems described above may serve as an ideal AI data hub as thesystems may service unstructured workloads. In the first stage, data isideally ingested and stored on to the same data hub that followingstages will use, in order to avoid excess data copying. The next twosteps can be done on a standard compute server that optionally includesa GPU, and then in the fourth and last stage, full training productionjobs are run on powerful GPU-accelerated servers. Often, there is aproduction pipeline alongside an experimental pipeline operating on thesame dataset. Further, the GPU-accelerated servers can be usedindependently for different models or joined together to train on onelarger model, even spanning multiple systems for distributed training.If the shared storage tier is slow, then data must be copied to localstorage for each phase, resulting in wasted time staging data ontodifferent servers. The ideal data hub for the AI training pipelinedelivers performance similar to data stored locally on the server nodewhile also having the simplicity and performance to enable all pipelinestages to operate concurrently.

A data scientist works to improve the usefulness of the trained modelthrough a wide variety of approaches: more data, better data, smartertraining, and deeper models. In many cases, there will be teams of datascientists sharing the same datasets and working in parallel to producenew and improved training models. Often, there is a team of datascientists working within these phases concurrently on the same shareddatasets. Multiple, concurrent workloads of data processing,experimentation, and full-scale training layer the demands of multipleaccess patterns on the storage tier. In other words, storage cannot justsatisfy large file reads, but must contend with a mix of large and smallfile reads and writes. Finally, with multiple data scientists exploringdatasets and models, it may be critical to store data in its nativeformat to provide flexibility for each user to transform, clean, and usethe data in a unique way. The storage systems described above mayprovide a natural shared storage home for the dataset, with dataprotection redundancy (e.g., by using RAID6) and the performancenecessary to be a common access point for multiple developers andmultiple experiments. Using the storage systems described above mayavoid the need to carefully copy subsets of the data for local work,saving both engineering and GPU-accelerated servers use time. Thesecopies become a constant and growing tax as the raw data set and desiredtransformations constantly update and change.

Readers will appreciate that a fundamental reason why deep learning hasseen a surge in success is the continued improvement of models withlarger data set sizes. In contrast, classical machine learningalgorithms, like logistic regression, stop improving in accuracy atsmaller data set sizes. As such, the separation of compute resources andstorage resources may also allow independent scaling of each tier,avoiding many of the complexities inherent in managing both together. Asthe data set size grows or new data sets are considered, a scale outstorage system must be able to expand easily. Similarly, if moreconcurrent training is required, additional GPUs or other computeresources can be added without concern for their internal storage.Furthermore, the storage systems described above may make building,operating, and growing an AI system easier due to the random readbandwidth provided by the storage systems, the ability to of the storagesystems to randomly read small files (50 KB) high rates (meaning that noextra effort is required to aggregate individual data points to makelarger, storage-friendly files), the ability of the storage systems toscale capacity and performance as either the dataset grows or thethroughput requirements grow, the ability of the storage systems tosupport files or objects, the ability of the storage systems to tuneperformance for large or small files (i.e., no need for the user toprovision filesystems), the ability of the storage systems to supportnon-disruptive upgrades of hardware and software even during productionmodel training, and for many other reasons.

Although the preceding paragraphs discuss deep learning applications,readers will appreciate that the storage systems described herein mayalso be part of a distributed deep learning (‘DDL’) platform to supportthe execution of DDL algorithms. Distributed deep learning may can beused to significantly accelerate deep learning with distributedcomputing on GPUs (or other form of accelerator or computer programinstruction executor), such that parallelism can be achieved. Inaddition, the output of training machine learning and deep learningmodels, such as a fully trained machine learning model, may be used fora variety of purposes and in conjunction with other tools. For example,trained machine learning models may be used in conjunction with toolslike Core ML to integrate a broad variety of machine learning modeltypes into an application. In fact, trained models may be run throughCore ML converter tools and inserted into a custom application that canbe deployed on compatible devices. The storage systems described abovemay also be paired with other technologies such as TensorFlow, anopen-source software library for dataflow programming across a range oftasks that may be used for machine learning applications such as neuralnetworks, to facilitate the development of such machine learning models,applications, and so on.

Readers will further appreciate that the systems described above may bedeployed in a variety of ways to support the democratization of AI, asAI becomes more available for mass consumption. The democratization ofAI may include, for example, the ability to offer AI as aPlatform-as-a-Service, the growth of Artificial general intelligenceofferings, the proliferation of Autonomous level 4 and Autonomous level5 vehicles, the availability of autonomous mobile robots, thedevelopment of conversational AI platforms, and many others. Forexample, the systems described above may be deployed in cloudenvironments, edge environments, or other environments that are usefulin supporting the democratization of AI. As part of the democratizationof AI, a movement may occur from narrow AI that consists of highlyscoped machine learning solutions that target a particular task toartificial general intelligence where the use of machine learning isexpanded to handle a broad range of use cases that could essentiallyperform any intelligent task that a human could perform and could learndynamically, much like a human.

The storage systems described above may also be optimized for use in bigdata analytics. Big data analytics may be generally described as theprocess of examining large and varied data sets to uncover hiddenpatterns, unknown correlations, market trends, customer preferences andother useful information that can help organizations make more-informedbusiness decisions. Big data analytics applications enable datascientists, predictive modelers, statisticians and other analyticsprofessionals to analyze growing volumes of structured transaction data,plus other forms of data that are often left untapped by conventionalbusiness intelligence (BI) and analytics programs. As part of thatprocess, semi-structured and unstructured data such as, for example,internet clickstream data, web server logs, social media content, textfrom customer emails and survey responses, mobile-phone call-detailrecords, IoT sensor data, and other data may be converted to astructured form. Big data analytics is a form of advanced analytics,which involves complex applications with elements such as predictivemodels, statistical algorithms and what-if analyses powered byhigh-performance analytics systems.

The storage systems described above may also implement AI platforms fordelivering on the vision of self-driving storage. Such AI platforms maybe configured to deliver global predictive intelligence by collectingand analyzing large amounts of storage system telemetry data points toenable effortless management, analytics and support. In fact, suchstorage systems may be capable of predicting both capacity andperformance, as well as generating intelligent advice on workloaddeployment, interaction and optimization. Such AI platforms may beconfigured to scan all incoming storage system telemetry data against alibrary of issue fingerprints to predict and resolve incidents inreal-time, before they impact customer environments, and captureshundreds of variables related to performance that are used to forecastperformance load.

The storage systems described above may support the serialized orsimultaneous execution artificial intelligence applications, machinelearning applications, data analytics applications, datatransformations, and other tasks that collectively may form an AIladder. Such an AI ladder may effectively be formed by combining suchelements to form a complete data science pipeline, where existdependencies between elements of the AI ladder. For example, AI mayrequire that some form of machine learning has taken place, machinelearning may require that some form of analytics has taken place,analytics may require that some form of data and informationarchitecting has taken place, and so on. As such, each element may beviewed as a rung in an AI ladder that collectively can form a completeand sophisticated AI solution.

The storage systems described above may also be paired withFPGA-accelerated servers as part of a larger AI or ML infrastructure.Such FPGA-accelerated servers may reside near (e.g., in the same datacenter) the storage systems described above or even incorporated into anappliance that includes one or more storage systems, one or moreFPGA-accelerated servers, networking infrastructure that supportscommunications between the one or more storage systems and the one ormore FPGA-accelerated servers, as well as other hardware and softwarecomponents. Alternatively, FPGA-accelerated servers may reside within acloud computing environment that may be used to perform compute-relatedtasks for AI and ML jobs. Any of the embodiments described above may beused to collectively serve as a FPGA-based AI or ML platform. Readerswill appreciate that, in some embodiments of the FPGA-based AI or MLplatform, the FPGAs that are contained within the FPGA-acceleratedservers may be reconfigured for different types of ML models (e.g.,LSTMs, CNNs, GRUs). The ability to reconfigure the FPGAs that arecontained within the FPGA-accelerated servers may enable theacceleration of a ML or AI application based on the most optimalnumerical precision and memory model being used. Readers will appreciatethat by treating the collection of FPGA-accelerated servers as a pool ofFPGAs, any CPU in the data center may utilize the pool of FPGAs as ashared hardware microservice, rather than limiting a server to dedicatedaccelerators plugged into it.

The FPGA-accelerated servers and the GPU-accelerated servers describedabove may implement a model of computing where, rather than keeping asmall amount of data in a CPU and running a long stream of instructionsover it as occurred in more traditional computing models, the machinelearning model and parameters are pinned into the high-bandwidth on-chipmemory with lots of data streaming though the high-bandwidth on-chipmemory. FPGAs may even be more efficient than GPUs for this computingmodel, as the FPGAs can be programmed with only the instructions neededto run this kind of computing model.

Readers will appreciate that, in part due to the emergence of many ofthe technologies discussed above including mobile devices, cloudservices, social networks, big data analytics, and so on, an informationtechnology platform may be needed to integrate all of these technologiesand drive new business opportunities by quickly deliveringrevenue-generating products, services, and experiences—rather thanmerely providing the technology to automate internal business processes.Information technology organizations may need to balance resources andinvestments needed to keep core legacy systems up and running while alsointegrating technologies to build an information technology platformthat can provide the speed and flexibility in areas such as, forexample, exploiting big data, managing unstructured data, and workingwith cloud applications and services. One possible embodiment of such aninformation technology platform is a composable infrastructure thatincludes fluid resource pools, such as many of the systems describedabove that, can meet the changing needs of applications by allowing forthe composition and recomposition of blocks of disaggregated compute,storage, and fabric infrastructure. Such a composable infrastructure canalso include a single management interface to eliminate complexity and aunified API to discover, search, inventory, configure, provision,update, and diagnose the composable infrastructure.

The systems described above can support the execution of a wide array ofsoftware applications. Such software applications can be deployed in avariety of ways, including container-based deployment models.Containerized applications may be managed using a variety of tools. Forexample, containerized applications may be managed using Docker Swarm, aclustering and scheduling tool for Docker containers that enables ITadministrators and developers to establish and manage a cluster ofDocker nodes as a single virtual system. Likewise, containerizedapplications may be managed through the use of Kubernetes, acontainer-orchestration system for automating deployment, scaling andmanagement of containerized applications. Kubernetes may execute on topof operating systems such as, for example, Red Hat Enterprise Linux,Ubuntu Server, SUSE Linux Enterprise Servers, and others. In suchexamples, a master node may assign tasks to worker/minion nodes.Kubernetes can include a set of components (e.g., kubelet, kube-proxy,cAdvisor) that manage individual nodes as a well as a set of components(e.g., etcd, API server, Scheduler, Control Manager) that form a controlplane. Various controllers (e.g., Replication Controller, DaemonSetController) can drive the state of a Kubernetes cluster by managing aset of pods that includes one or more containers that are deployed on asingle node. Containerized applications may be used to facilitate aserverless, cloud native computing deployment and management model forsoftware applications. In support of a serverless, cloud nativecomputing deployment and management model for software applications,containers may be used as part of an event handling mechanisms (e.g.,AWS Lambdas) such that various events cause a containerized applicationto be spun up to operate as an event handler.

For further explanation, FIG. 3D illustrates an exemplary computingdevice 350 that may be specifically configured to perform one or more ofthe processes described herein. As shown in FIG. 3D, computing device350 may include a communication interface 352, a processor 354, astorage device 356, and an input/output (“I/O”) module 358communicatively connected one to another via a communicationinfrastructure 360. While an exemplary computing device 350 is shown inFIG. 3D, the components illustrated in FIG. 3D are not intended to belimiting. Additional or alternative components may be used in otherembodiments. Components of computing device 350 shown in FIG. 3D willnow be described in additional detail.

Communication interface 352 may be configured to communicate with one ormore computing devices. Examples of communication interface 352 include,without limitation, a wired network interface (such as a networkinterface card), a wireless network interface (such as a wirelessnetwork interface card), a modem, an audio/video connection, and anyother suitable interface.

Processor 354 generally represents any type or form of processing unitcapable of processing data and/or interpreting, executing, and/ordirecting execution of one or more of the instructions, processes,and/or operations described herein. Processor 354 may perform operationsby executing computer-executable instructions 362 (e.g., an application,software, code, and/or other executable data instance) stored in storagedevice 356.

Storage device 356 may include one or more data storage media, devices,or configurations and may employ any type, form, and combination of datastorage media and/or device. For example, storage device 356 mayinclude, but is not limited to, any combination of the non-volatilemedia and/or volatile media described herein. Electronic data, includingdata described herein, may be temporarily and/or permanently stored instorage device 356. For example, data representative ofcomputer-executable instructions 362 configured to direct processor 354to perform any of the operations described herein may be stored withinstorage device 356. In some examples, data may be arranged in one ormore databases residing within storage device 356.

I/O module 358 may include one or more I/O modules configured to receiveuser input and provide user output. I/O module 358 may include anyhardware, firmware, software, or combination thereof supportive of inputand output capabilities. For example, I/O module 358 may includehardware and/or software for capturing user input, including, but notlimited to, a keyboard or keypad, a touchscreen component (e.g.,touchscreen display), a receiver (e.g., an RF or infrared receiver),motion sensors, and/or one or more input buttons.

I/O module 358 may include one or more devices for presenting output toa user, including, but not limited to, a graphics engine, a display(e.g., a display screen), one or more output drivers (e.g., displaydrivers), one or more audio speakers, and one or more audio drivers. Incertain embodiments, I/O module 358 is configured to provide graphicaldata to a display for presentation to a user. The graphical data may berepresentative of one or more graphical user interfaces and/or any othergraphical content as may serve a particular implementation. In someexamples, any of the systems, computing devices, and/or other componentsdescribed herein may be implemented by computing device 350.

For further explanation, FIG. 4A sets forth a block diagram illustratinga plurality of storage systems (402, 404, 406) that support a podaccording to some embodiments of the present disclosure. Althoughdepicted in less detail, the storage systems (402, 404, 406) depicted inFIG. 4A may be similar to the storage systems described above withreference to FIGS. 1A-1D, FIGS. 2A-2G, FIGS. 3A-3B, or any combinationthereof. In fact, the storage systems (402, 404, 406) depicted in FIG.4A may include the same, fewer, or additional components as the storagesystems described above.

In the example depicted in FIG. 4A, each of the storage systems (402,404, 406) is depicted as having at least one computer processor (408,410, 412), computer memory (414, 416, 418), and computer storage (420,422, 424). Although in some embodiments the computer memory (414, 416,418) and the computer storage (420, 422, 424) may be part of the samehardware devices, in other embodiments the computer memory (414, 416,418) and the computer storage (420, 422, 424) may be part of differenthardware devices. The distinction between the computer memory (414, 416,418) and the computer storage (420, 422, 424) in this particular examplemay be that the computer memory (414, 416, 418) is physically proximateto the computer processors (408, 410, 412) and may store computerprogram instructions that are executed by the computer processors (408,410, 412), while the computer storage (420, 422, 424) is embodied asnon-volatile storage for storing user data, metadata describing the userdata, and so on. Referring to the example above in FIG. 1A, for example,the computer processors (408, 410, 412) and computer memory (414, 416,418) for a particular storage system (402, 404, 406) may reside withinone of more of the controllers (110A-110D) while the attached storagedevices (171A-171F) may serve as the computer storage (420, 422, 424)within a particular storage system (402, 404, 406).

In the example depicted in FIG. 4A, the depicted storage systems (402,404, 406) may attach to one or more pods (430, 432) according to someembodiments of the present disclosure. Each of the pods (430, 432)depicted in FIG. 4A can include a dataset (426, 428). For example, afirst pod (430) that three storage systems (402, 404, 406) have attachedto includes a first dataset (426) while a second pod (432) that twostorage systems (404, 406) have attached to includes a second dataset(428). In such an example, when a particular storage system attaches toa pod, the pod's dataset is copied to the particular storage system andthen kept up to date as the dataset is modified. Storage systems can beremoved from a pod, resulting in the dataset being no longer kept up todate on the removed storage system. In the example depicted in FIG. 4A,any storage system which is active for a pod (it is an up-to-date,operating, non-faulted member of a non-faulted pod) can receive andprocess requests to modify or read the pod's dataset.

In the example depicted in FIG. 4A, each pod (430, 432) may also includea set of managed objects and management operations, as well as a set ofaccess operations to modify or read the dataset (426, 428) that isassociated with the particular pod (430, 432). In such an example, themanagement operations may modify or query managed objects equivalentlythrough any of the storage systems. Likewise, access operations to reador modify the dataset may operate equivalently through any of thestorage systems. In such an example, while each storage system stores aseparate copy of the dataset as a proper subset of the datasets storedand advertised for use by the storage system, the operations to modifymanaged objects or the dataset performed and completed through any onestorage system are reflected in subsequent management objects to querythe pod or subsequent access operations to read the dataset.

Readers will appreciate that pods may implement more capabilities thanjust a clustered synchronously replicated dataset. For example, pods canbe used to implement tenants, whereby datasets are in some way securelyisolated from each other. Pods can also be used to implement virtualarrays or virtual storage systems where each pod is presented as aunique storage entity on a network (e.g., a Storage Area Network, orInternet Protocol network) with separate addresses. In the case of amulti-storage-system pod implementing a virtual storage system, allphysical storage systems associated with the pod may present themselvesas in some way the same storage system (e.g., as if the multiplephysical storage systems were no different than multiple network portsinto a single storage system).

Readers will appreciate that pods may also be units of administration,representing a collection of volumes, file systems, object/analyticstores, snapshots, and other administrative entities, where makingadministrative changes (e.g., name changes, property changes, managingexports or permissions for some part of the pod's dataset), on any onestorage system is automatically reflected to all active storage systemsassociated with the pod. In addition, pods could also be units of datacollection and data analysis, where performance and capacity metrics arepresented in ways that aggregate across all active storage systems forthe pod, or that call out data collection and analysis separately foreach pod, or perhaps presenting each attached storage system'scontribution to the incoming content and performance for each a pod.

One model for pod membership may be defined as a list of storagesystems, and a subset of that list where storage systems are consideredto be in-sync for the pod. A storage system may be considered to bein-sync for a pod if it is at least within a recovery of havingidentical idle content for the last written copy of the datasetassociated with the pod. Idle content is the content after anyin-progress modifications have completed with no processing of newmodifications. Sometimes this is referred to as “crash recoverable”consistency. Recovery of a pod carries out the process of reconcilingdifferences in applying concurrent updates to in-sync storage systems inthe pod. Recovery can resolve any inconsistencies between storagesystems in the completion of concurrent modifications that had beenrequested to various members of the pod but that were not signaled toany requestor as having completed successfully. Storage systems that arelisted as pod members but that are not listed as in-sync for the pod canbe described as “detached” from the pod. Storage systems that are listedas pod members, are in-sync for the pod, and are currently available foractively serving data for the pod are “online” for the pod.

Each storage system member of a pod may have its own copy of themembership, including which storage systems it last knew were in-sync,and which storage systems it last knew comprised the entire set of podmembers. To be online for a pod, a storage system must consider itselfto be in-sync for the pod and must be communicating with all otherstorage systems it considers to be in-sync for the pod. If a storagesystem can't be certain that it is in-sync and communicating with allother storage systems that are in-sync, then it must stop processing newincoming requests for the pod (or must complete them with an error orexception) until it can be certain that it is in-sync and communicatingwith all other storage systems that are in-sync. A first storage systemmay conclude that a second paired storage system should be detached,which will allow the first storage system to continue since it is nowin-sync with all storage systems now in the list. But, the secondstorage system must be prevented from concluding, alternatively, thatthe first storage system should be detached and with the second storagesystem continuing operation. This would result in a “split brain”condition that can lead to irreconcilable datasets, dataset corruption,or application corruption, among other dangers.

The situation of needing to determine how to proceed when notcommunicating with paired storage systems can arise while a storagesystem is running normally and then notices lost communications, whileit is currently recovering from some previous fault, while it isrebooting or resuming from a temporary power loss or recoveredcommunication outage, while it is switching operations from one set ofstorage system controller to another set for whatever reason, or duringor after any combination of these or other kinds of events. In fact, anytime a storage system that is associated with a pod can't communicatewith all known non-detached members, the storage system can either waitbriefly until communications can be established, go offline and continuewaiting, or it can determine through some means that it is safe todetach the non-communicating storage system without risk of incurring asplit brain due to the non-communicating storage system concluding thealternative view, and then continue. If a safe detach can happen quicklyenough, the storage system can remain online for the pod with littlemore than a short delay and with no resulting application outages forapplications that can issue requests to the remaining online storagesystems.

One example of this situation is when a storage system may know that itis out-of-date. That can happen, for example, when a first storagesystem is first added to a pod that is already associated with one ormore storage systems, or when a first storage system reconnects toanother storage system and finds that the other storage system hadalready marked the first storage system as detached. In this case, thisfirst storage system will simply wait until it connects to some otherset of storage systems that are in-sync for the pod.

This model demands some degree of consideration for how storage systemsare added to or removed from pods or from the in-sync pod members list.Since each storage system will have its own copy of the list, and sincetwo independent storage systems can't update their local copy at exactlythe same time, and since the local copy is all that is available on areboot or in various fault scenarios, care must be taken to ensure thattransient inconsistencies don't cause problems. For example, if onestorage systems is in-sync for a pod and a second storage system isadded, then if the second storage system is updated to list both storagesystems as in-sync first, then if there is a fault and a restart of bothstorage systems, the second might startup and wait to connect to thefirst storage system while the first might be unaware that it should orcould wait for the second storage system. If the second storage systemthen responds to an inability to connect with the first storage systemby going through a process to detach it, then it might succeed incompleting a process that the first storage system is unaware of,resulting in a split brain. As such, it may be necessary to ensure thatstorage systems won't disagree inappropriately on whether they might optto go through a detach process if they aren't communicating.

One way to ensure that storage systems won't disagree inappropriately onwhether they might opt to go through a detach process if they aren'tcommunicating is to ensure that when adding a new storage system to thein-sync member list for a pod, the new storage system first stores thatit is a detached member (and perhaps that it is being added as anin-sync member). Then, the existing in-sync storage systems can locallystore that the new storage system is an in-sync pod member before thenew storage system locally stores that same fact. If there is a set ofreboots or network outages prior to the new storage system storing itsin-sync status, then the original storage systems may detach the newstorage system due to non-communication, but the new storage system willwait. A reverse version of this change might be needed for removing acommunicating storage system from a pod: first the storage system beingremoved stores that it is no longer in-sync, then the storage systemsthat will remain store that the storage system being removed is nolonger in-sync, then all storage systems delete the storage system beingremoved from their pod membership lists. Depending on theimplementation, an intermediate persisted detached state may not benecessary. Whether or not care is required in local copies of membershiplists may depend on the model storage systems use for monitoring eachother or for validating their membership. If a consensus model is usedfor both, or if an external system (or an external distributed orclustered system) is used to store and validate pod membership, theninconsistencies in locally stored membership lists may not matter.

When communications fail or one or several storage systems in a podfail, or when a storage system starts up (or fails over to a secondarycontroller) and can't communicate with paired storage systems for a pod,and it is time for one or more storage systems to decide to detach oneor more paired storage systems, some algorithm or mechanism must beemployed to decide that it is safe to do so and to follow through on thedetach. One means of resolving detaches is use a majority (or quorum)model for membership. With three storage systems, as long as two arecommunicating, they can agree to detach a third storage system thatisn't communicating, but that third storage system cannot by itselfchoose to detach either of the other two. Confusion can arise whenstorage system communication is inconsistent. For example, storagesystem A might be communicating with storage system B but not C, whilestorage system B might be communicating with both A and C. So, A and Bcould detach C, or B and C could detach A, but more communicationbetween pod members may be needed to figure this out.

Care needs to be taken in a quorum membership model when adding andremoving storage systems. For example, if a fourth storage system isadded, then a “majority” of storage systems is at that point three. Thetransition from three storage systems (with two required for majority)to a pod including a fourth storage system (with three required formajority) may require something similar to the model describedpreviously for carefully adding a storage system to the in-sync list.For example, the fourth storage system might start in an attaching statebut not yet attached where it would never instigate a vote over quorum.Once in that state, the original three pod members could each be updatedto be aware of the fourth member and the new requirement for a threestorage system majority to detach a fourth. Removing a storage systemfrom a pod might similarly move that storage system to a locally stored“detaching” state before updating other pod members. A variant schemefor this is to use a distributed consensus mechanism such as PAXOS orRAFT to implement any membership changes or to process detach requests.

Another means of managing membership transitions is to use an externalsystem that is outside of the storage systems themselves to handle podmembership. In order to become online for a pod, a storage system mustfirst contact the external pod membership system to verify that it isin-sync for the pod. Any storage system that is online for a pod shouldthen remain in communication with the pod membership system and shouldwait or go offline if it loses communication. An external pod membershipmanager could be implemented as a highly available cluster using variouscluster tools, such as Oracle RAC, Linux HA, VERITAS Cluster Server,IBM's HACMP, or others. An external pod membership manager could alsouse distributed configuration tools such as Etcd or Zookeeper, or areliable distributed database such as Amazon's DynamoDB.

In the example depicted in FIG. 4A, the depicted storage systems (402,404, 406) may receive a request to read a portion of the dataset (426,428) and process the request to read the portion of the dataset locallyaccording to some embodiments of the present disclosure. Readers willappreciate that although requests to modify (e.g., a write operation)the dataset (426, 428) require coordination between the storage systems(402, 404, 406) in a pod, as the dataset (426, 428) should be consistentacross all storage systems (402, 404, 406) in a pod, responding to arequest to read a portion of the dataset (426, 428) does not requiresimilar coordination between the storage systems (402, 404, 406). Assuch, a particular storage system that receives a read request mayservice the read request locally by reading a portion of the dataset(426, 428) that is stored within the storage system's storage devices,with no synchronous communication with other storage systems in the pod.Read requests received by one storage system for a replicated dataset ina replicated cluster are expected to avoid any communication in the vastmajority of cases, at least when received by a storage system that isrunning within a cluster that is also running nominally. Such readsshould normally be processed simply by reading from the local copy of aclustered dataset with no further interaction required with otherstorage systems in the cluster

Readers will appreciate that the storage systems may take steps toensure read consistency such that a read request will return the sameresult regardless of which storage system processes the read request.For example, the resulting clustered dataset content for any set ofupdates received by any set of storage systems in the cluster should beconsistent across the cluster, at least at any time updates are idle(all previous modifying operations have been indicated as complete andno new update requests have been received and processed in any way).More specifically, the instances of a clustered dataset across a set ofstorage systems can differ only as a result of updates that have not yetcompleted. This means, for example, that any two write requests whichoverlap in their volume block range, or any combination of a writerequest and an overlapping snapshot, compare-and-write, or virtual blockrange copy, must yield a consistent result on all copies of the dataset.Two operations should not yield a result as if they happened in oneorder on one storage system and a different order on another storagesystem in the replicated cluster.

Furthermore, read requests can be made time order consistent. Forexample, if one read request is received on a replicated cluster andcompleted and that read is then followed by another read request to anoverlapping address range which is received by the replicated clusterand where one or both reads in any way overlap in time and volumeaddress range with a modification request received by the replicatedcluster (whether any of the reads or the modification are received bythe same storage system or a different storage system in the replicatedcluster), then if the first read reflects the result of the update thenthe second read should also reflect the results of that update, ratherthan possibly returning data that preceded the update. If the first readdoes not reflect the update, then the second read can either reflect theupdate or not. This ensures that between two read requests “time” for adata segment cannot roll backward.

In the example depicted in FIG. 4A, the depicted storage systems (402,404, 406) may also detect a disruption in data communications with oneor more of the other storage systems and determine whether to theparticular storage system should remain in the pod. A disruption in datacommunications with one or more of the other storage systems may occurfor a variety of reasons. For example, a disruption in datacommunications with one or more of the other storage systems may occurbecause one of the storage systems has failed, because a networkinterconnect has failed, or for some other reason. An important aspectof synchronous replicated clustering is ensuring that any fault handlingdoesn't result in unrecoverable inconsistencies, or any inconsistency inresponses. For example, if a network fails between two storage systems,at most one of the storage systems can continue processing newlyincoming I/O requests for a pod. And, if one storage system continuesprocessing, the other storage system can't process any new requests tocompletion, including read requests.

In the example depicted in FIG. 4A, the depicted storage systems (402,404, 406) may also determine whether the particular storage systemshould remain in the pod in response to detecting a disruption in datacommunications with one or more of the other storage systems. Asmentioned above, to be ‘online’ as part of a pod, a storage system mustconsider itself to be in-sync for the pod and must be communicating withall other storage systems it considers to be in-sync for the pod. If astorage system can't be certain that it is in-sync and communicatingwith all other storage systems that are in-sync, then it may stopprocessing new incoming requests to access the dataset (426, 428). Assuch, the storage system may determine whether to the particular storagesystem should remain online as part of the pod, for example, bydetermining whether it can communicate with all other storage systems itconsiders to be in-sync for the pod (e.g., via one or more testmessages), by determining whether the all other storage systems itconsiders to be in-sync for the pod also consider the storage system tobe attached to the pod, through a combination of both steps where theparticular storage system must confirm that it can communicate with allother storage systems it considers to be in-sync for the pod and thatall other storage systems it considers to be in-sync for the pod alsoconsider the storage system to be attached to the pod, or through someother mechanism.

In the example depicted in FIG. 4A, the depicted storage systems (402,404, 406) may also keep the dataset on the particular storage systemaccessible for management and dataset operations in response todetermining that the particular storage system should remain in the pod.The storage system may keep the dataset (426, 428) on the particularstorage system accessible for management and dataset operations, forexample, by accepting requests to access the version of the dataset(426, 428) that is stored on the storage system and processing suchrequests, by accepting and processing management operations associatedwith the dataset (426, 428) that are issued by a host or authorizedadministrator, by accepting and processing management operationsassociated with the dataset (426, 428) that are issued by one of theother storage systems, or in some other way.

In the example depicted in FIG. 4A, the depicted storage systems (402,404, 406) may, however, make the dataset on the particular storagesystem inaccessible for management and dataset operations in response todetermining that the particular storage system should not remain in thepod. The storage system may make the dataset (426, 428) on theparticular storage system inaccessible for management and datasetoperations, for example, by rejecting requests to access the version ofthe dataset (426, 428) that is stored on the storage system, byrejecting management operations associated with the dataset (426, 428)that are issued by a host or other authorized administrator, byrejecting management operations associated with the dataset (426, 428)that are issued by one of the other storage systems in the pod, or insome other way.

In the example depicted in FIG. 4A, the depicted storage systems (402,404, 406) may also detect that the disruption in data communicationswith one or more of the other storage systems has been repaired and makethe dataset on the particular storage system accessible for managementand dataset operations. The storage system may detect that thedisruption in data communications with one or more of the other storagesystems has been repaired, for example, by receiving a message from theone or more of the other storage systems. In response to detecting thatthe disruption in data communications with one or more of the otherstorage systems has been repaired, the storage system may make thedataset (426, 428) on the particular storage system accessible formanagement and dataset operations once the previously detached storagesystem has been resynchronized with the storage systems that remainedattached to the pod.

In the example depicted in FIG. 4A, the depicted storage systems (402,404, 406) may also go offline from the pod such that the particularstorage system no longer allows management and dataset operations. Thedepicted storage systems (402, 404, 406) may go offline from the podsuch that the particular storage system no longer allows management anddataset operations for a variety of reasons. For example, the depictedstorage systems (402, 404, 406) may also go offline from the pod due tosome fault with the storage system itself, because an update or someother maintenance is occurring on the storage system, due tocommunications faults, or for many other reasons. In such an example,the depicted storage systems (402, 404, 406) may subsequently update thedataset on the particular storage system to include all updates to thedataset since the particular storage system went offline and go backonline with the pod such that the particular storage system allowsmanagement and dataset operations, as will be described in greaterdetail in the resynchronization sections included below.

In the example depicted in FIG. 4A, the depicted storage systems (402,404, 406) may also identifying a target storage system forasynchronously receiving the dataset, where the target storage system isnot one of the plurality of storage systems across which the dataset issynchronously replicated. Such a target storage system may represent,for example, a backup storage system, as some storage system that makesuse of the synchronously replicated dataset, and so on. In fact,synchronous replication can be leveraged to distribute copies of adataset closer to some rack of servers, for better local readperformance. One such case is smaller top-of-rack storage systemssymmetrically replicated to larger storage systems that are centrallylocated in the data center or campus and where those larger storagesystems are more carefully managed for reliability or are connected toexternal networks for asynchronous replication or backup services.

In the example depicted in FIG. 4A, the depicted storage systems (402,404, 406) may also identify a portion of the dataset that is not beingasynchronously replicated to the target storage system by any of theother storages systems and asynchronously replicate, to the targetstorage system, the portion of the dataset that is not beingasynchronously replicated to the target storage system by any of theother storages systems, wherein the two or more storage systemscollectively replicate the entire dataset to the target storage system.In such a way, the work associated with asynchronously replicating aparticular dataset may be split amongst the members of a pod, such thateach storage system in a pod is only responsible for asynchronouslyreplicating a subset of a dataset to the target storage system.

In the example depicted in FIG. 4A, the depicted storage systems (402,404, 406) may also detach from the pod, such that the particular storagesystem that detaches from the pod is no longer included in the set ofstorage systems across which the dataset is synchronously replicated.For example, if storage system (404) in FIG. 4A detached from the pod(430) illustrated in FIG. 4A, the pod (430) would only include storagesystems (402, 406) as the storage systems across which the dataset (426)that is included in the pod (430) would be synchronously replicatedacross. In such an example, detaching the storage system from the podcould also include removing the dataset from the particular storagesystem that detached from the pod. Continuing with the example where thestorage system (404) in FIG. 4A detached from the pod (430) illustratedin FIG. 4A, the dataset (426) that is included in the pod (430) could bedeleted or otherwise removed from the storage system (404).

Readers will appreciate that there are a number of unique administrativecapabilities enabled by the pod model that can further be supported.Also, the pod model itself introduces some issues that can be addressedby an implementation. For example, when a storage system is offline fora pod, but is otherwise running, such as because an interconnect failedand another storage system for the pod won out in mediation, there maystill be a desire or need to access the offline pod's dataset on theoffline storage system. One solution may be simply to enable the pod insome detached mode and allow the dataset to be accessed. However, thatsolution can be dangerous and that solution can cause the pod's metadataand data to be much more difficult to reconcile when the storage systemsdo regain communication. Furthermore, there could still be a separatepath for hosts to access the offline storage system as well as the stillonline storage systems. In that case, a host might issue I/O to bothstorage systems even though they are no longer being kept in sync,because the host sees target ports reporting volumes with the sameidentifiers and the host I/O drivers presume it sees additional paths tothe same volume. This can result in fairly damaging data corruption asreads and writes issued to both storage systems are no longer consistenteven though the host presumes they are. As a variant of this case, in aclustered application, such as a shared storage clustered database, theclustered application running on one host might be reading or writing toone storage system and the same clustered application running on anotherhost might be reading or writing to the “detached” storage system, yetthe two instances of the clustered application are communicating betweeneach other on the presumption that the dataset they each see is entirelyconsistent for completed writes. Since they aren't consistent, thatpresumption is violated and the application's dataset (e.g., thedatabase) can quickly end up being corrupted.

One way to solve both of these problems is to allow for an offline pod,or perhaps a snapshot of an offline pod, to be copied to a new pod withnew volumes that have sufficiently new identities that host I/O driversand clustered applications won't confuse the copied volumes as being thesame as the still online volumes on another storage system. Since eachpod maintains a complete copy of the dataset, which is crash consistentbut perhaps slightly different from the copy of the pod dataset onanother storage system, and since each pod has an independent copy ofall data and metadata needed to operate on the pod content, it is astraightforward problem to make a virtual copy of some or all volumes orsnapshots in the pod to new volumes in a new pod. In a logical extentgraph implementation, for example, all that is needed is to define newvolumes in a new pod which reference logical extent graphs from thecopied pod associated with the pod's volumes or snapshots, and with thelogical extent graphs being marked as copy on write. The new volumesshould be treated as new volumes, similarly to how volume snapshotscopied to a new volume might be implemented. Volumes may have the sameadministrative name, though within a new pod namespace. But, they shouldhave different underlying identifiers, and differing logical unitidentifiers from the original volumes.

In some cases it may be possible to use virtual network isolationtechniques (for example, by creating a virtual LAN in the case of IPnetworks or a virtual SAN in the case of fiber channel networks) in sucha way that isolation of volumes presented to some interfaces can beassured to be inaccessible from host network interfaces or host SCSIinitiator ports that might also see the original volumes. In such cases,it may be safe to provide the copies of volumes with the same SCSI orother storage identifiers as the original volumes. This could be used,for example, in cases where the applications expect to see a particularset of storage identifiers in order to function without an undue burdenin reconfiguration.

Some of the techniques described herein could also be used outside of anactive fault context to test readiness for handling faults. Readinesstesting (sometimes referred to as “fire drills”) is commonly requiredfor disaster recovery configurations, where frequent and repeatedtesting is considered a necessity to ensure that most or all aspects ofa disaster recovery plan are correct and account for any recent changesto applications, datasets, or changes in equipment. Readiness testingshould be non-disruptive to current production operations, includingreplication. In many cases the real operations can't actually be invokedon the active configuration, but a good way to get close is to usestorage operations to make copies of production datasets, and thenperhaps couple that with the use of virtual networking, to create anisolated environment containing all data that is believed necessary forthe important applications that must be brought up successfully in casesof disasters. Making such a copy of a synchronously replicated (or evenan asynchronously replicated) dataset available within a site (orcollection of sites) that is expected to perform a disaster recoveryreadiness test procedure and then starting the important applications onthat dataset to ensure that it can startup and function is a great tool,since it helps ensure that no important parts of the applicationdatasets were left out in the disaster recovery plan. If necessary, andpractical, this could be coupled with virtual isolated networks coupledperhaps with isolated collection of physical or virtual machines, to getas close as possible to a real world disaster recovery takeoverscenario. Virtually copying a pod (or set of pods) to another pod as apoint-in-time image of the pod datasets immediately creates an isolateddataset that contains all the copied elements and that can then beoperated on essentially identically to the originally pods, as well asallowing isolation to a single site (or a few sites) separately from theoriginal pod. Further, these are fast operations and they can be torndown and repeated easily allowing testing to repeated as often as isdesired.

Some enhancements could be made to get further toward perfect disasterrecovery testing. For example, in conjunction with isolated networks,SCSI logical unit identities or other types of identities could becopied into the target pod so that the test servers, virtual machines,and applications see the same identities. Further, the administrativeenvironment of the servers could be configured to respond to requestsfrom a particular virtual set of virtual networks to respond to requestsand operations on the original pod name so scripts don't require use oftest-variants with alternate “test” versions of object names. A furtherenhancement can be used in cases where the host-side serverinfrastructure that will take over in the case of a disaster takeovercan be used during a test. This includes cases where a disaster recoverydata center is completely stocked with alternative server infrastructurethat won't generally be used until directed to do so by a disaster. Italso includes cases where that infrastructure might be used fornon-critical operations (for example, running analytics on productiondata, or simply supporting application development or other functionswhich may be important but can be halted if needed for more criticalfunctions). Specifically, host definitions and configurations and theserver infrastructure that will use them can be set up as they will befor an actual disaster recovery takeover event and tested as part ofdisaster recovery takeover testing, with the tested volumes beingconnected to these host definitions from the virtual pod copy used toprovide a snapshot of the dataset. From the standpoint of the storagesystems involved, then, these host definitions and configurations usedfor testing, and the volume-to-host connection configurations usedduring testing, can be reused when an actual disaster takeover event istriggered, greatly minimizing the configuration differences between thetest configuration and the real configuration that will be used in caseof a disaster recovery takeover.

In some cases it may make sense to move volumes out of a first pod andinto a new second pod including just those volumes. The pod membershipand high availability and recovery characteristics can then be adjustedseparately, and administration of the two resulting pod datasets canthen be isolated from each other. An operation that can be done in onedirection should also be possible in the other direction. At some point,it may make sense to take two pods and merge them into one so that thevolumes in each of the original two pods will now track each other forstorage system membership and high availability and recoverycharacteristics and events. Both operations can be accomplished safelyand with reasonably minimal or no disruption to running applications byrelying on the characteristics suggested for changing mediation orquorum properties for a pod which were discussed in an earlier section.With mediation, for example, a mediator for a pod can be changed using asequence consisting of a step where each storage system in a pod ischanged to depend on both a first mediator and a second mediator andeach is then changed to depend only on the second mediator. If a faultoccurs in the middle of the sequence, some storage systems may depend onboth the first mediator and the second mediator, but in no case willrecovery and fault handling result in some storage systems dependingonly on the first mediator and other storage systems only depending onthe second mediator. Quorum can be handled similarly by temporarilydepending on winning against both a first quorum model and a secondquorum model in order to proceed to recovery. This may result in a veryshort time period where availability of the pod in the face of faultsdepend on additional resources, thus reducing potential availability,but this time period is very short and the reduction in availability isoften very little. With mediation, if the change in mediator parametersis nothing more than the change in the key used for mediation and themediation service used is the same, then the potential reduction inavailability is even less, since it now depends only on two calls to thesame service versus one call to that service, and rather than separatecalls to two separate services.

Readers will note that changing the quorum model may be quite complex.An additional step may be necessary where storage systems willparticipate in the second quorum model but won't depend on winning inthat second quorum model, which is then followed by the step of alsodepending on the second quorum model. This may be necessary to accountfor the fact that if only one system has processed the change to dependon the quorum model, then it will never win quorum since there willnever be a majority. With this model in place for changing the highavailability parameters (mediation relationship, quorum model, takeoverpreferences), we can create a safe procedure for these operations tosplit a pod into two or to join two pods into one. This may requireadding one other capability: linking a second pod to a first pod forhigh availability such that if two pods include compatible highavailability parameters the second pod linked to the first pod candepend on the first pod for determining and instigating detach-relatedprocessing and operations, offline and in-sync states, and recovery andresynchronization actions.

To split a pod into two, which is an operation to move some volumes intoa newly created pod, a distributed operation may be formed that can bedescribed as: form a second pod into which we will move a set of volumeswhich were previously in a first pod, copy the high availabilityparameters from the first pod into the second pod to ensure they arecompatible for linking, and link the second pod to the first pod forhigh availability. This operation may be encoded as messages and shouldbe implemented by each storage system in the pod in such a way that thestorage system ensures that the operation happens completely on thatstorage system or does not happen at all if processing is interrupted bya fault. Once all in-sync storage systems for the two pods haveprocessed this operation, the storage systems can then process asubsequent operation which changes the second pod so that it is nolonger linked to the first pod. As with other changes to highavailability characteristics for a pod, this involves first having eachin-sync storage system change to rely on both the previous model (thatmodel being that high availability is linked to the first pod) and thenew model (that model being its own now independent high availability).In the case of mediation or quorum, this means that storage systemswhich processed this change will first depend on mediation or quorumbeing achieved as appropriate for the first pod and will additionallydepend on a new separate mediation (for example, a new mediation key) orquorum being achieved for the second pod before the second pod canproceed following a fault that required mediation or testing for quorum.As with the previous description of changing quorum models, anintermediate step may set storage systems to participate in quorum forthe second pod before the step where storage systems participate in anddepend on quorum for the second pod. Once all in-sync storage systemshave processed the change to depend on the new parameters for mediationor quorum for both the first pod and the second pod, the split iscomplete.

Joining a second pod into a first pod operates essentially in reverse.First, the second pod must be adjusted to be compatible with the firstpod, by having an identical list of storage systems and by having acompatible high availability model. This may involve some set of stepssuch as those described elsewhere in this paper to add or remove storagesystems or to change mediator and quorum models. Depending onimplementation, it may be necessary only to reach an identical list ofstorage systems. Joining proceeds by processing an operation on eachin-sync storage system to link the second pod to the first pod for highavailability. Each storage system which processes that operation willthen depend on the first pod for high availability and then the secondpod for high availability. Once all in-sync storage systems for thesecond pod have processed that operation, the storage systems will theneach process a subsequent operation to eliminate the link between thesecond pod and the first pod, migrate the volumes from the second podinto the first pod, and delete the second pod. Host or applicationdataset access can be preserved throughout these operations, as long asthe implementation allows proper direction of host or applicationdataset modification or read operations to the volume by identity and aslong as the identity is preserved as appropriate to the storage protocolor storage model (for example, as long as logical unit identifiers forvolumes and use of target ports for accessing volumes are preserved inthe case of SCSI).

Migrating a volume between pods may present issues. If the pods have anidentical set of in-sync membership storage systems, then it may bestraightforward: temporarily suspend operations on the volumes beingmigrated, switch control over operations on those volumes to controllingsoftware and structures for the new pod, and then resume operations.This allows for a seamless migration with continuous uptime forapplications apart from the very brief operation suspension, providednetwork and ports migrate properly between pods. Depending on theimplementation, suspending operations may not even be necessary, or maybe so internal to the system that the suspension of operations has noimpact. Copying volumes between pods with different in-sync membershipsets is more of a problem. If the target pod for the copy has a subsetof in-sync members from the source pod, this isn't much of a problem: amember storage system can be dropped safely enough without having to domore work. But, if the target pod adds in-sync member storage systems tothe volume over the source pod, then the added storage systems must besynchronized to include the volume's content before they can be used.Until synchronized, this leaves the copied volumes distinctly differentfrom the already synchronized volumes, in that fault handling differsand request handling from the not yet synced member storage systemseither won't work or must be forwarded or won't be as fast because readswill have to traverse an interconnect. Also, the internal implementationwill have to handle some volumes being in sync and ready for faulthandling and others not being in sync.

There are other problems relating to reliability of the operation in theface of faults. Coordinating a migration of volumes betweenmulti-storage-system pods is a distributed operation. If pods are theunit of fault handling and recovery, and if mediation or quorum orwhatever means are used to avoid split-brain situations, then a switchin volumes from one pod with a particular set of state andconfigurations and relationships for fault handling, recovery, mediationand quorum to another then storage systems in a pod have to be carefulabout coordinating changes related to that handling for any volumes.Operations can't be atomically distributed between storage systems, butmust be staged in some way. Mediation and quorum models essentiallyprovide pods with the tools for implementing distributed transactionalatomicity, but this may not extend to inter-pod operations withoutadding to the implementation.

Consider even a simple migration of a volume from a first pod to asecond pod even for two pods that share the same first and secondstorage systems. At some point the storage systems will coordinate todefine that the volume is now in the second pod and is no longer in thefirst pod. If there is no inherent mechanism for transactional atomicityacross the storage systems for the two pods, then a naive implementationcould leave the volume in the first pod on the first storage system andthe second pod on the second storage system at the time of a networkfault that results in fault handling to detach storage systems from thetwo pods. If pods separately determine which storage system succeeds indetaching the other, then the result could be that the same storagesystem detaches the other storage system for both pods, in which casethe result of the volume migration recovery should be consistent, or itcould result in a different storage system detaching the other for thetwo pods. If the first storage system detaches the second storage systemfor the first pod and the second storage system detaches the firststorage system for the second pod, then recovery might result in thevolume being recovered to the first pod on the first storage system andinto the second pod on the second storage system, with the volume thenrunning and exported to hosts and storage applications on both storagesystems. If instead the second storage system detaches the first storagesystem for the first pod and first storage detaches the second storagesystem for the second pod, then recovery might result in the volumebeing discarded from the second pod by the first storage system and thevolume being discarded from the first pod by the second storage system,resulting in the volume disappearing entirely. If the pods a volume isbeing migrated between are on differing sets of storage systems, thenthings can get even more complicated.

A solution to these problems may be to use an intermediate pod alongwith the techniques described previously for splitting and joining pods.This intermediate pod may never be presented as visible managed objectsassociated with the storage systems. In this model, volumes to be movedfrom a first pod to a second pod are first split from the first pod intoa new intermediate pod using the split operation described previously.The storage system members for the intermediate pod can then be adjustedto match the membership of storage systems by adding or removing storagesystems from the pod as necessary. Subsequently, the intermediate podcan be joined with the second pod.

For further explanation, FIG. 4B sets forth diagrams of metadatarepresentations that may be implemented as a structured collection ofmetadata objects that, together, may represent a logical volume ofstorage data, or a portion of a logical volume, in accordance with someembodiments of the present disclosure. Metadata representations 451-50,451-54, and 451-60 may be stored within a storage system (451-06), andone or more metadata representations may be generated and maintained foreach of multiple storage objects, such as volumes, or portions ofvolumes, stored within a storage system (451-06).

While other types of structured collections of the metadata objects arepossible, in this example, metadata representations may be structured asa directed acyclic graph (DAG) of nodes, where, to maintain efficientaccess to any given node, the DAG may be structured and balancedaccording to various methods. For example, a DAG for a metadatarepresentation may be defined as a type of B-tree, and balancedaccordingly in response to changes to the structure of the metadatarepresentation, where changes to the metadata representation may occurin response to changes to, or additions to, underlying data representedby the metadata representation. While in this example, there are onlytwo levels for the sake of simplicity, in other examples, metadatarepresentations may span across multiple levels and may include hundredsor thousands of nodes, where each node may include any number of linksto other nodes.

Further, in this example, the leaves of a metadata representation mayinclude pointers to the stored data for a volume, or portion of avolume, where a logical address, or a volume and offset, may be used toidentify and navigate through the metadata representation to reach oneor more leaf nodes that reference stored data corresponding to thelogical address. For example, a volume (451-52) may be represented by ametadata representation (451-50), which includes multiple metadataobject nodes (451-52, 451-52A-451-52N), where leaf nodes(451-52A-451-52N) include pointers to respective data objects(451-53A-451-53N, 451-57). Data objects may be any size unit of datawithin a storage system (451-06). For example, data objects(451-53A-451-53N, 451-57) may each be a logical extent, where logicalextents may be some specified size, such as 1 MB, 4 MB, or some othersize.

In this example, a snapshot (451-56) may be created as a snapshot of astorage object, in this case, a volume (451-52), where at the point intime when the snapshot (451-56) is created, the metadata representation(451-54) for the snapshot (451-56) includes all of the metadata objectsfor the metadata representation (451-50) for the volume (451-52).Further, in response to creation of the snapshot (451-56), the metadatarepresentation (451-54) may be designated to be read only. However, thevolume (451-52) sharing the metadata representation may continue to bemodified, and while at the moment the snapshot is created, the metadatarepresentations for the volume (451-52) and the snapshot (451-56) areidentical, as modifications are made to data corresponding to the volume(451-52), and in response to the modifications, the metadatarepresentations for the volume (451-52) and the snapshot (451-56) maydiverge and become different.

For example, given a metadata representation (451-50) to represent avolume (451-52) and a metadata representation (451-54) to represent asnapshot (451-56), the storage system (451-06) may receive an I/Ooperation that writes to data that is ultimately stored within aparticular data object (451-53B), where the data object (451-53B) ispointed to by a leaf node pointer (451-52B), and where the leaf nodepointer (451-52B) is part of both metadata representations (451-50,451-54). In response to the write operation, the read only data objects(451-53A-451-53N) referred to by the metadata representation (451-54)remain unchanged, and the pointer (451-52B) may also remain unchanged.However, the metadata representation (451-50), which represents thecurrent volume (451-52), is modified to include a new data object tohold the data written by the write operation, where the modifiedmetadata representation is depicted as the metadata representation(451-60). Further, the write operation may be directed to only a portionof the data object (451-53B), and consequently, the new data object(451-57) may include a copy of previous contents of the data object(451-53B) in addition to the payload for the write operation.

In this example, as part of processing the write operation, the metadatarepresentation (451-60) for the volume (451-52) is modified to remove anexisting metadata object pointer (451-52B) and to include a new metadataobject pointer (451-58), where the new metadata object pointer (451-58)is configured to point to a new data object (451-57), where the new dataobject (451-57) stores the data written by the write operation. Further,the metadata representation (451-60) for the volume (451-52) continuesto include all metadata objects included within the previous metadatarepresentation (451-50)—with the exclusion of the metadata objectpointer (451-52B) that referenced the target data object, where themetadata object pointer (451-52B) continues to reference the read onlydata object (451-53B) that would have been overwritten.

In this way, using metadata representations, a volume or a portion of avolume may be considered to be snapshotted, or considered to be copied,by creating metadata objects, and without actual duplication of dataobjects—where the duplication of data objects may be deferred until awrite operation is directed at one of the read only data objectsreferred to by the metadata representations.

In other words, an advantage of using a metadata representation torepresent a volume is that a snapshot or a copy of a volume may becreated and be accessible in constant order time, and specifically, inthe time it takes to create a metadata object for the snapshot or copy,and to create a reference for the snapshot or copy metadata object tothe existing metadata representation for the volume being snapshotted orcopied.

As an example use, a virtualized copy-by-reference may make use of ametadata representation in a manner that is similar to the use of ametadata representation in creating a snapshot of a volume—where ametadata representation for a virtualized copy-by-reference may oftencorrespond to a portion of a metadata representation for an entirevolume. An example implementation of virtualized copy-by-reference maybe within the context of a virtualized storage system, where multipleblock ranges within and between volumes may reference a unified copy ofstored data. In such virtualized storage system, the metadata describedabove may be used to handle the relationship between virtual, orlogical, addresses and physical, or real, addresses—in other words, themetadata representation of stored data enables a virtualized storagesystem that may be considered flash-friendly in that it reduces, orminimizes, wear on flash memory.

In some examples, logical extents may be combined in various ways,including as simple collections or as logically related address rangeswithin some larger-scale logical extent that is formed as a set oflogical extent references. These larger combinations could also be givenlogical extent identities of various kinds, and could be furthercombined into still larger logical extents or collections. Acopy-on-write status could apply to various layers, and in various waysdepending on the implementation. For example, a copy on write statusapplied to a logical collection of logical collections of extents mightresult in a copied collection retaining references to unchanged logicalextents and the creation of copied-on-write logical extents (throughcopying references to any unchanged stored data blocks as needed) whenonly part of the copy-on-write logical collection is changed.

Deduplication, volume snapshots, or block range snapshots may beimplemented in this model through combinations of referencing storeddata blocks, or referencing logical extents, or marking logical extents(or identified collections of logical extents) as copy-on-write.

Further, with flash storage systems, stored data blocks may be organizedand grouped together in various ways as collections are written out intopages that are part of larger erase blocks. Eventual garbage collectionof deleted or replaced stored data blocks may involve moving contentstored in some number of pages elsewhere so that an entire erase blockcan be erased and prepared for reuse. This process of selecting physicalflash pages, eventually migrating and garbage collecting them, and thenerasing flash erase blocks for reuse may or may not be coordinated,driven by, or performed by the aspect of a storage system that is alsohandling logical extents, deduplication, compression, snapshots, virtualcopying, or other storage system functions. A coordinated or drivenprocess for selecting pages, migrating pages, garbage collecting anderasing erase blocks may further take into account variouscharacteristics of the flash memory device cells, pages, and eraseblocks such as number of uses, aging predictions, adjustments to voltagelevels or numbers of retries needed in the past to recover stored data.They may also take into account analysis and predictions across allflash memory devices within the storage system.

To continue with this example, where a storage system may be implementedbased on directed acyclic graphs comprising logical extents, logicalextents can be categorized into two types: leaf logical extents, whichreference some amount of stored data in some way, and composite logicalextents, which reference other leaf or composite logical extents.

A leaf extent can reference data in a variety of ways. It can pointdirectly to a single range of stored data (e.g., 64 kilobytes of data),or it can be a collection of references to stored data (e.g., a 1megabyte “range” of content that maps some number of virtual blocksassociated with the range to physically stored blocks). In the lattercase, these blocks may be referenced using some identity, and someblocks within the range of the extent may not be mapped to anything.Also, in that latter case, these block references need not be unique,allowing multiple mappings from virtual blocks within some number oflogical extents within and across some number of volumes to map to thesame physically stored blocks. Instead of stored block references, alogical extent could encode simple patterns: for example, a block whichis a string of identical bytes could simply encode that the block is arepeated pattern of identical bytes.

A composite logical extent can be a logical range of content with somevirtual size, which comprises a plurality of maps that each map from asubrange of the composite logical extent logical range of content to anunderlying leaf or composite logical extent. Transforming a requestrelated to content for a composite logical extent, then, involves takingthe content range for the request within the context of the compositelogical extent, determining which underlying leaf or composite logicalextents that request maps to, and transforming the request to apply toan appropriate range of content within those underlying leaf orcomposite logical extents.

Volumes, or files or other types of storage objects, can be described ascomposite logical extents. Thus, these presented storage objects can beorganized using this extent model.

Depending on implementation, leaf or composite logical extents could bereferenced from a plurality of other composite logical extents,effectively allowing inexpensive duplication of larger collections ofcontent within and across volumes. Thus, logical extents can be arrangedessentially within an acyclic graph of references, each ending in leaflogical extents. This can be used to make copies of volumes, to makesnapshots of volumes, or as part of supporting virtual range copieswithin and between volumes as part of EXTENDED COPY or similar types ofoperations.

An implementation may provide each logical extent with an identity whichcan be used to name it. This simplifies referencing, since thereferences within composite logical extents become lists comprisinglogical extent identities and a logical subrange corresponding to eachsuch logical extent identity. Within logical extents, each stored datablock reference may also be based on some identity used to name it.

To support these duplicated uses of extents, we can add a furthercapability: copy-on-write logical extents. When a modifying operationaffects a copy-on-write leaf or composite logical extent the logicalextent is copied, with the copy being a new reference and possiblyhaving a new identity (depending on implementation). The copy retainsall references or identities related to underlying leaf or compositelogical extents, but with whatever modifications result from themodifying operation. For example, a WRITE, WRITE SAME, XDWRITEREAD,XPWRITE, or COMPARE AND WRITE request may store new blocks in thestorage system (or use deduplication techniques to identify existingstored blocks), resulting in modifying the corresponding leaf logicalextents to reference or store identities to a new set of blocks,possibly replacing references and stored identities for a previous setof blocks. Alternately, an UNMAP request may modify a leaf logicalextent to remove one or more block references. In both types of cases, aleaf logical extent is modified. If the leaf logical extent iscopy-on-write, then a new leaf logical extent will be created that isformed by copying unaffected block references from the old extent andthen replacing or removing block references based on the modifyingoperation.

A composite logical extent that was used to locate the leaf logicalextent may then be modified to store the new leaf logical extentreference or identity associated with the copied and modified leaflogical extent as a replacement for the previous leaf logical extent. Ifthat composite logical extent is copy-on-write, then a new compositelogical extent is created as a new reference or with a new identity, andany unaffected references or identities to its underlying logicalextents are copied to that new composite logical extent, with theprevious leaf logical extent reference or identity being replaced withthe new leaf logical extent reference or identity.

This process continues further backward from referenced extent toreferencing composite extent, based on the search path through theacyclic graph used to process the modifying operation, with allcopy-on-write logical extents being copied, modified, and replaced.

These copied leaf and composite logical extents can then drop thecharacteristic of being copy on write, so that further modifications donot result in an additional copy. For example, the first time someunderlying logical extent within a copy-on-write “parent” compositeextent is modified, that underlying logical extent may be copied andmodified, with the copy having a new identity which is then written intoa copied and replaced instance of the parent composite logical extent.However, a second time some other underlying logical extent is copiedand modified and with that other underlying logical extent copy's newidentity being written to the parent composite logical extent, theparent can then be modified in place with no further copy and replacenecessary on behalf of references to the parent composite logicalextent.

Modifying operations to new regions of a volume or of a compositelogical extent for which there is no current leaf logical extent maycreate a new leaf logical extent to store the results of thosemodifications. If that new logical extent is to be referenced from anexisting copy-on-write composite logical extent, then that existingcopy-on-write composite logical extent will be modified to reference thenew logical extent, resulting in another copy, modify, and replacesequence of operations similar to the sequence for modifying an existingleaf logical extent.

If a parent composite logical extent cannot be grown large enough (basedon implementation) to cover an address range associated that includesnew leaf logical extents to create for a new modifying operation, thenthe parent composite logical extent may be copied into two or more newcomposite logical extents which are then referenced from a single“grandparent” composite logical extent which yet again is a newreference or a new identity. If that grandparent logical extent isitself found through another composite logical extent that iscopy-on-write, then that another composite logical extent will be copiedand modified and replaced in a similar way as described in previousparagraphs. This copy-on-write model can be used as part of implementingsnapshots, volume copies, and virtual volume address range copies withina storage system implementation based on these directed acyclic graphsof logical extents. To make a snapshot as a read-only copy of anotherwise writable volume, a graph of logical extents associated withthe volume is marked copy-on-write and a reference to the originalcomposite logical extents are retained by the snapshot. Modifyingoperations to the volume will then make logical extent copies as needed,resulting in the volume storing the results of those modifyingoperations and the snapshots retaining the original content. Volumecopies are similar, except that both the original volume and the copiedvolume can modify content resulting in their own copied logical extentgraphs and subgraphs.

Virtual volume address range copies can operate either by copying blockreferences within and between leaf logical extents (which does notitself involve using copy-on-write techniques unless changes to blockreferences modifies copy-on-write leaf logical extents). Alternately,virtual volume address range copies can duplicate references to leaf orcomposite logical extents, which works well for volume address rangecopies of larger address ranges. Further, this allows graphs to becomedirected acyclic graphs of references rather than merely referencetrees. Copy-on-write techniques associated with duplicated logicalextent references can be used to ensure that modifying operations to thesource or target of a virtual address range copy will result in thecreation of new logical extents to store those modifications withoutaffecting the target or the source that share the same logical extentimmediately after the volume address range copy operation.

Input/output operations for pods may also be implemented based onreplicating directed acyclic graphs of logical extents. For example,each storage system within a pod could implement private graphs oflogical extents, such that the graphs on one storage system for a podhave no particular relationship to the graphs on any second storagesystem for the pod. However, there is value in synchronizing the graphsbetween storage systems in a pod. This can be useful forresynchronization and for coordinating features such as asynchronous orsnapshot based replication to remote storage systems. Further, it may beuseful for reducing some overhead for handling the distribution ofsnapshot and copy related processing. In such a model, keeping thecontent of a pod in sync across all in-sync storage systems for a pod isessentially the same as keeping graphs of leaf and composite logicalextents in sync for all volumes across all in-sync storage systems forthe pod, and ensuring that the content of all logical extents isin-sync. To be in sync, matching leaf and composite logical extentsshould either have the same identity or should have mappable identities.Mapping could involve some set of intermediate mapping tables or couldinvolve some other type of identity translation. In some cases,identities of blocks mapped by leaf logical extents could also be keptin sync.

In a pod implementation based on a leader and followers, with a singleleader for each pod, the leader can be in charge of determining anychanges to the logical extent graphs. If a new leaf or composite logicalextent is to be created, it can be given an identity. If an existingleaf or composite logical extent is to be copied to form a new logicalextent with modifications, the new logical extent can be described as acopy of a previous logical extent with some set of modifications. If anexisting logical extent is to be split, the split can be described alongwith the new resulting identities. If a logical extent is to bereferenced as an underlying logical extent from some additionalcomposite logical extent, that reference can be described as a change tothe composite logical extent to reference that underlying logicalextent.

Modifying operations in a pod thus comprises distributing descriptionsof modifications to logical extent graphs (where new logical extents arecreated to extend content or where logical extents are copied, modified,and replaced to handle copy-on-write states related to snapshots, volumecopies, and volume address range copies) and distributing descriptionsand content for modifications to the content of leaf logical extents. Anadditional benefit that comes from using metadata in the form ofdirected acyclic graphs, as described above, is that I/O operations thatmodify stored data in physical storage may be given effect at a userlevel through the modification of metadata corresponding to the storeddata in physical storage—without modifying the stored data in physicalstorage. In the disclosed embodiments of storage systems, where thephysical storage may be a solid state drive, the wear that accompaniesmodifications to flash memory may be avoided or reduced due to I/Ooperations being given effect through the modifications of the metadatarepresenting the data targeted by the I/O operations instead of throughthe reading, erasing, or writing of flash memory. Further, as notedabove, in such a virtualized storage system, the metadata describedabove may be used to handle the relationship between virtual, orlogical, addresses and physical, or real, addresses—in other words, themetadata representation of stored data enables a virtualized storagesystem that may be considered flash-friendly in that it reduces, orminimizes, wear on flash memory.

Leader storage systems may perform their own local operations toimplement these descriptions in the context of their local copy of thepod dataset and the local storage system's metadata. Further, thein-sync followers perform their own separate local operations toimplement these descriptions in the context of their separate local copyof the pod dataset and their separate local storage system's metadata.When both leader and follower operations are complete, the result iscompatible graphs of logical extents with compatible leaf logical extentcontent. These graphs of logical extents then become a type of “commonmetadata” as described in previous examples. This common metadata can bedescribed as dependencies between modifying operations and requiredcommon metadata. Transformations to graphs can be described as separateoperations within a set of or more predicates that may describerelationships, such as dependencies, with one or more other operations.In other words, interdependencies between operations may be described asa set of precursors that one operation depends on in some way, where theset of precursors may be considered predicates that must be true for anoperation to complete. A fuller description of predicates may be foundwithin application Ser. No. 15/696,418, which is included herein byreference in its entirety. Alternately, each modifying operation thatrelies on a particular same graph transformation that has not yet beenknown to complete across the pod can include the parts of any graphtransformation that it relies on. Processing an operation descriptionthat identifies a “new” leaf or composite logical extent that alreadyexists can avoid creating the new logical extent since that part wasalready handled in the processing of some earlier operation, and caninstead implement only the parts of the operation processing that changethe content of leaf or composite logical extents. It is a role of theleader to ensure that transformations are compatible with each other.For example, we can start with two writes come that come in for a pod. Afirst write replaces a composite logical extent A with a copy of formedas composite logical extent B, replaces a leaf logical extent C with acopy as leaf logical extent D and with modifications to store thecontent for the second write, and further writes leaf logical extent Dinto composite logical extent B. Meanwhile, a second write implies thesame copy and replacement of composite logical extent A with compositelogical extent B but copies and replaces a different leaf logical extentE with a logical extent F which is modified to store the content of thesecond write, and further writes logical extent F into logical extent B.In that case, the description for the first write can include thereplacement of A with B and C with D and the writing of D into compositelogical extent B and the writing of the content of the first write intoleaf extend B; and, the description of the second write can include thereplacement of A with B and E with F and the writing of F into compositelogical extent B, along with the content of the second write which willbe written to leaf extent F. A leader or any follower can thenseparately process the first write or the second write in any order, andthe end result is B copying and replacing A, D copying and replacing C,F copying replacing E, and D and F being written into composite logicalextent B. A second copy of A to form B can be avoided by recognizingthat B already exists. In this way, a leader can ensure that the podmaintains compatible common metadata for a logical extent graph acrossin-sync storage systems for a pod.

Given an implementation of storage systems using directed acyclic graphsof logical extents, recovery of pods based on replicated directedacyclic graphs of logical extents may be implemented. Specifically, inthis example, recovery in pods may be based on replicated extent graphsthen involves recovering consistency of these graphs as well asrecovering content of leaf logical extents. In this implementation ofrecovery, operations may include querying for graph transformations thatare not known to have completed on all in-sync storage systems for apod, as well as all leaf logical extent content modifications that arenot known to have completed across all storage systems for the pod. Suchquerying could be based on operations since some coordinated checkpoint,or could simply be operations not known to have completed where eachstorage system keeps a list of operations during normal operation thathave not yet been signaled as completed. In this example, graphtransformations are straightforward: a graph transformation may createnew things, copy old things to new things, and copy old things into twoor more split new things, or they modify composite extents to modifytheir references to other extents. Any stored operation descriptionfound on any in-sync storage system that creates or replaces any logicalextent can be copied and performed on any other storage system that doesnot yet have that logical extent. Operations that describe modificationsto leaf or composite logical extents can apply those modifications toany in-sync storage system that had not yet applied them, as long as theinvolved leaf or composite logical extents have been recovered properly.

In another example, as an alternative to using a logical extent graph,storage may be implemented based on a replicated content-addressablestore. In a content-addressable store, for each block of data (forexample, every 512 bytes, 4096 bytes, 8192 bytes or even 16384 bytes) aunique hash value (sometimes also called a fingerprint) is calculated,based on the block content, so that a volume or an extent range of avolume can be described as a list of references to blocks that have aparticular hash value. In a synchronously replicated storage systemimplementation based on references to blocks with the same hash value,replication could involve a first storage system receiving blocks,calculating fingerprints for those blocks, identifying block referencesfor those fingerprints, and delivering changes to one or a plurality ofadditional storage systems as updates to the mapping of volume blocks toreferenced blocks. If a block is found to have already been stored bythe first storage system, that storage system can use its reference toname the reference in each of the additional storage systems (eitherbecause the reference uses the same hash value or because an identifierfor the reference is either identical or can be mapped readily).Alternately, if a block is not found by the first storage system, thencontent of the first storage system may be delivered to other storagesystems as part of the operation description along with the hash valueor identity associated with that block content. Further, each in-syncstorage system's volume descriptions are then updated with the new blockreferences. Recovery in such a store may then include comparing recentlyupdated block references for a volume. If block references differbetween different in-sync storage systems for a pod, then one version ofeach reference can be copied to other storage systems to make themconsistent. If the block reference on one system does not exist, then itbe copied from some storage system that does store a block for thatreference. Virtual copy operations can be supported in such a block orhash reference store by copying the references as part of implementingthe virtual copy operation.

For further explanation, FIG. 5 sets forth a flow chart illustratingsteps that may be performed by storage systems (402, 404, 406) thatsupport a pod according to some embodiments of the present disclosure.Although depicted in less detail, the storage systems (402. 404, 406),communicating over data communications links (502, 504, 506), anddepicted in FIG. 5 may be similar to the storage systems described abovewith reference to FIGS. 1A-1D, FIGS. 2A-2G, FIGS. 3A-3B, FIGS. 4A and4B, or any combination thereof. In fact, the storage systems (402, 404,406) depicted in FIG. 5 may include the same, fewer, additionalcomponents as the storage systems described above.

In the example method depicted in FIG. 5 , a storage system (402) mayattach (508) to a pod. The model for pod membership may include a listof storage systems and a subset of that list where storage systems arepresumed to be in-sync for the pod. A storage system is in-sync for apod if it is at least within a recovery of having identical idle contentfor the last written copy of the dataset associated with the pod. Idlecontent is the content after any in-progress modifications havecompleted with no processing of new modifications. Sometimes this isreferred to as “crash recoverable” consistency. Storage systems that arelisted as pod members but that are not listed as in-sync for the pod canbe described as “detached” from the pod. Storage systems that are listedas pod members, are in-sync for the pod, and are currently available foractively serving data for the pod are “online” for the pod.

In the example method depicted in FIG. 5 , the storage system (402) mayattach (508) to a pod, for example, by synchronizing its locally storedversion of the dataset (426) along with an up-to-date version of thedataset (426) that is stored on other storage systems (404, 406) in thepod that are online, as the term is described above. In such an example,in order for the storage system (402) to attach (508) to the pod, a poddefinition stored locally within each of the storage systems (402, 404,406) in the pod may need to be updated in order for the storage system(402) to attach (508) to the pod. In such an example, each storagesystem member of a pod may have its own copy of the membership,including which storage systems it last knew were in-sync, and whichstorage systems it last knew comprised the entire set of pod members.

In the example method depicted in FIG. 5 , the storage system (402) mayalso receive (510) a request to read a portion of the dataset (426) andthe storage system (402) may process (512) the request to read theportion of the dataset (426) locally. Readers will appreciate thatalthough requests to modify (e.g., a write operation) the dataset (426)require coordination between the storage systems (402, 404, 406) in apod, as the dataset (426) should be consistent across all storagesystems (402, 404, 406) in a pod, responding to a request to read aportion of the dataset (426) does not require similar coordinationbetween the storage systems (402, 404, 406). As such, a particularstorage system (402) that receives a read request may service the readrequest locally by reading a portion of the dataset (426) that is storedwithin the storage system's (402) storage devices, with no synchronouscommunication with other storage systems (404, 406) in the pod. Readrequests received by one storage system for a replicated dataset in areplicated cluster are expected to avoid any communication in the vastmajority of cases, at least when received by a storage system that isrunning within a cluster that is also running nominally. Such readsshould normally be processed simply by reading from the local copy of aclustered dataset with no further interaction required with otherstorage systems in the cluster

Readers will appreciate that the storage systems may take steps toensure read consistency such that a read request will return the sameresult regardless of which storage system processes the read request.For example, the resulting clustered dataset content for any set ofupdates received by any set of storage systems in the cluster should beconsistent across the cluster, at least at any time updates are idle(all previous modifying operations have been indicated as complete andno new update requests have been received and processed in any way).More specifically, the instances of a clustered dataset across a set ofstorage systems can differ only as a result of updates that have not yetcompleted. This means, for example, that any two write requests whichoverlap in their volume block range, or any combination of a writerequest and an overlapping snapshot, compare-and-write, or virtual blockrange copy, must yield a consistent result on all copies of the dataset.Two operations cannot yield a result as if they happened in one order onone storage system and a different order on another storage system inthe replicated cluster.

Furthermore, read requests may be time order consistent. For example, ifone read request is received on a replicated cluster and completed andthat read is then followed by another read request to an overlappingaddress range which is received by the replicated cluster and where oneor both reads in any way overlap in time and volume address range with amodification request received by the replicated cluster (whether any ofthe reads or the modification are received by the same storage system ora different storage system in the replicated cluster), then if the firstread reflects the result of the update then the second read should alsoreflect the results of that update, rather than possibly returning datathat preceded the update. If the first read does not reflect the update,then the second read can either reflect the update or not. This ensuresthat between two read requests “time” for a data segment cannot rollbackward.

In the example method depicted in FIG. 5 , the storage system (402) mayalso detect (514) a disruption in data communications with one or moreof the other storage systems (404, 406). A disruption in datacommunications with one or more of the other storage systems (404, 406)may occur for a variety of reasons. For example, a disruption in datacommunications with one or more of the other storage systems (404, 406)may occur because one of the storage systems (402, 404, 406) has failed,because a network interconnect has failed, or for some other reason. Animportant aspect of synchronous replicated clustering is ensuring thatany fault handling doesn't result in unrecoverable inconsistencies, orany inconsistency in responses. For example, if a network fails betweentwo storage systems, at most one of the storage systems can continueprocessing newly incoming I/O requests for a pod. And, if one storagesystem continues processing, the other storage system can't process anynew requests to completion, including read requests.

In the example method depicted in FIG. 5 , the storage system (402) mayalso determine (516) whether to the particular storage system (402)should remain online as part of the pod. As mentioned above, to be‘online’ as part of a pod, a storage system must consider itself to bein-sync for the pod and must be communicating with all other storagesystems it considers to be in-sync for the pod. If a storage systemcan't be certain that it is in-sync and communicating with all otherstorage systems that are in-sync, then it may stop processing newincoming requests to access the dataset (426). As such, the storagesystem (402) may determine (516) whether to the particular storagesystem (402) should remain online as part of the pod, for example, bydetermining whether it can communicate with all other storage systems(404, 406) it considers to be in-sync for the pod (e.g., via one or moretest messages), by determining whether the all other storage systems(404, 406) it considers to be in-sync for the pod also consider thestorage system (402) to be attached to the pod, through a combination ofboth steps where the particular storage system (402) must confirm thatit can communicate with all other storage systems (404, 406) itconsiders to be in-sync for the pod and that all other storage systems(404, 406) it considers to be in-sync for the pod also consider thestorage system (402) to be attached to the pod, or through some othermechanism.

In the example method depicted in FIG. 5 , the storage system (402) mayalso, responsive to affirmatively (518) determining that the particularstorage system (402) should remain online as part of the pod, keep (522)the dataset (426) on the particular storage system (402) accessible formanagement and dataset operations. The storage system (402) may keep(522) the dataset (426) on the particular storage system (402)accessible for management and dataset operations, for example, byaccepting requests to access the version of the dataset (426) that isstored on the storage system (402) and processing such requests, byaccepting and processing management operations associated with thedataset (426) that are issued by a host or authorized administrator, byaccepting and processing management operations associated with thedataset (426) that are issued by one of the other storage systems (404,406) in the pod, or in some other way.

In the example method depicted in FIG. 5 , the storage system (402) mayalso, responsive to determining that the particular storage systemshould not (520) remain online as part of the pod, make (524) thedataset (426) on the particular storage system (402) inaccessible formanagement and dataset operations. The storage system (402) may make(524) the dataset (426) on the particular storage system (402)inaccessible for management and dataset operations, for example, byrejecting requests to access the version of the dataset (426) that isstored on the storage system (402), by rejecting management operationsassociated with the dataset (426) that are issued by a host or otherauthorized administrator, by rejecting management operations associatedwith the dataset (426) that are issued by one of the other storagesystems (404, 406) in the pod, or in some other way.

In the example method depicted in FIG. 5 , the storage system (402) mayalso detect (526) that the disruption in data communications with one ormore of the other storage systems (404, 406) has been repaired. Thestorage system (402) may detect (526) that the disruption in datacommunications with one or more of the other storage systems (404, 406)has been repaired, for example, by receiving a message from the one ormore of the other storage systems (404, 406). In response to detecting(526) that the disruption in data communications with one or more of theother storage systems (404, 406) has been repaired, the storage system(402) may make (528) the dataset (426) on the particular storage system(402) accessible for management and dataset operations.

Readers will appreciate that the example depicted in FIG. 5 describes anembodiment in which various actions are depicted as occurring withinsome order, although no ordering is required. Furthermore, otherembodiments may exist where the storage system (402) only carries out asubset of the described actions. For example, the storage system (402)may perform the steps of detecting (514) a disruption in datacommunications with one or more of the other storage systems (404, 406),determining (516) whether to the particular storage system (402) shouldremain in the pod, keeping (522) the dataset (426) on the particularstorage system (402) accessible for management and dataset operations ormaking (524) the dataset (426) on the particular storage system (402)inaccessible for management and dataset operations without firstreceiving (510) a request to read a portion of the dataset (426) andprocessing (512) the request to read the portion of the dataset (426)locally. Furthermore, the storage system (402) may detect (526) that thedisruption in data communications with one or more of the other storagesystems (404, 406) has been repaired and make (528) the dataset (426) onthe particular storage system (402) accessible for management anddataset operations without first receiving (510) a request to read aportion of the dataset (426) and processing (512) the request to readthe portion of the dataset (426) locally. In fact, none of the stepsdescribed herein are explicitly required in all embodiments asprerequisites for performing other steps described herein.

For further explanation FIG. 6 illustrates a configurable replicationsystem that provides continuous replication with minimal batching and anadjustable recovery point objective. In contrast to the example storagesystems described with reference to FIG. 5 , which describes use of podsin implementing synchronous replication, in this example, pods are usedfor asynchronous, or near-synchronous replication.

However, as described further below, while replication may beasynchronous, efficient use of lightweight journals, also referred to asmetadata logs, allows for a short, typical recovery point (the timedifference between last update on a source data repository and the clockvalue of the source data repository associated with the latestconsistent dataset available at a target data repository) that can be onthe order of a few to 50 or 100 milliseconds, or a short intrinsic orconfigured recovery point objective (RPO), where in some cases, the RPOmay be on the order of a few tens of milliseconds up to some specifiednumber of minutes. In some examples, the RPO limit may be more of afunction of a typical maximum transfer time. As an illustrativescenario, the earth's moon is a little over one light-second away fromthe earth, so with sufficient bandwidth to avoid queue delay, an RPO tothe moon of 1.2 seconds is possible with a lightweight journalimplementation (receiving an acknowledgement from the moon for theprimary to confirm the recovery point will take at least another 1.2seconds).

In some implementations, the configurable replication system providesfor disaster recovery from a failure at a source data repository basedon a target data repository being able to provide read and write accesswith a consistent version of the source data repository in response tothe failure of the source data repository. As an example, consider a setof clock values associated with an original dataset that is beingupdated, where a source time represents a clock value for the sourcedataset, and includes all updates which were signaled as completed onthe original dataset prior to that time and excludes all updates whichwere received to be processed against the dataset after that time. Inthis example, any updates which were received to be processed againstthe dataset at the source time but had not yet been signaled ascompleted can in general be arbitrarily included or excluded barring anytransactional interdependencies.

Further, a snapshot may represent one such source time for a dataset,and where rolling lightweight checkpoints may represent a sequence ofdataset source times. In near-sync replication, checkpoints may beapplied as they come in or when they are completely ready to be applied.As a result, in some examples, a tracking dataset always represents somereplicated source time clock value which is generally some amount behindthe live dataset's source time clock value. In this example, thedifference between the replicated dataset source time clock value andthe live dataset source time clock value may be reported as the currentavailable “recovery point”—the distance between the replicated datasetsource time clock value and the live dataset source time clock (thoughpropagation delays likely mean that neither source nor target knowexactly what this time distance is).

In some implementations, the lightweight journals may be a basis forimplementing continuous data protection—with or without anyimplementation of data replication. In some examples, continuous dataprotection provides relatively fine-grained versioning of a dataset forextended periods of time, to allow roll-back or other access to any ofthose fine-grained versions. For example, these versions can be examinedto determine when some update or corruption occurred, allowing aroll-back or other access (such as the formation of a usable snapshot orclone) to the version immediately prior to that update. In some cases,it makes sense to provide access to both the pre-change/pre-corruptiondataset as well as the more recent data (or even a set of points-in-timeof the dataset before or since the time of the update/corruption) sothat other changes can be copied or otherwise reconciled, or fordiagnostic purposes.

Further, continuing with this example, in continuous data protection,checkpoints of a dataset may be replayed up to some limit in order toconstruct a consistent image. In some cases, such checkpoints may betransformed into a read-only snapshot, or the dataset may also be cloned(or the read-only snapshot may be cloned) to form a read-write volumethat may be used for various purposes. In this example, animplementation of continuous data protection may clone a volume to matchsome point in time, test it to determine whether the volume includes orexcludes some data or some corruption, and then if needed re-clone thevolume to match some other point in time and test the volume again. Inthis example, when a point-in-time is determined, that point-in-time maybe used as a basis to generate a primary volume or simply copy data outof the volume at that point-in-time.

Further still, in some implementations, continuous data protection mayprovide more granular access to these named source time clock valuesfrom the source dataset, with granularity limited to the granularity ofcheckpoints. In some cases, continuous data protection could be eitherlocal (the checkpoints are retained on a local storage system and areavailable for local access), or they can be on a replication target (thecheckpoints are retained on a replication target), or both, with eachpossibly having different retention periods and models for mergingcheckpoints or converting them to long-duration snapshots.

In some implementations, a ‘pod’, as the term is used here andthroughout the present application, may be embodied as a managemententity that represents a dataset, a set of managed objects andmanagement operations, a set of access operations to modify or read thedataset, and a plurality of storage systems. Such management operationsmay modify or query managed objects through a storage system with properaccess. Each storage system may store a separate copy of the dataset asa proper subset of the datasets stored and advertised for use by thestorage system, where operations to modify managed objects or thedataset performed and completed through any one storage system arereflected in subsequent management objects to query the pod orsubsequent access operations to read the dataset.

In some implementations, a replication relationship is formed as a setof storage systems 602, 624 that replicate some dataset 612 betweenindependent stores, where each storage system 602, 624 may have its owncopy and its own separate internal management of relevant datastructures for defining storage objects, for mapping objects to physicalstorage, for deduplication, for defining the mapping of content tosnapshots, and so on. In this way, a replication system may use a commonmanagement model that is a same, or similar, management model, and use asame, or similar, implementation model and persistent data structuresfor both synchronous replication and asynchronous replication.

As illustrated, a source data repository 602 receives storage systemoperations 652 and may communicate with a target data repository 624 togenerate replica data. In this example, the source data repository 602may be similar to computing device 350 or similar to a storage system100, 306, 318, as described above with reference to FIGS. 1A-3D. Whileexemplary systems are depicted in FIG. 6 , the components illustrated inFIG. 6 are not intended to be exhaustive or limiting.

As noted above, incoming data storage operations 652 may be received andhandled by the source data repository 602, and the data storageoperations that update or modify a volume 658, or more generally, modifyone or more datasets, may be streamed or transmitted to the target datarepository 624 as the data storage operations arrive. In other words,the source data repository 602 may be considered ‘active’ in that thesource data repository 602 accepts write operations and other operationsthat may modify the stored data, where the target data repository 624may be considered ‘passive’ in that the target data repository 624 mayaccept read operations, but not storage operations that may modify thestored data.

In this example, the source data repository 602 maintains a metadata log604, which may be referred to as a journal of modifying data storageoperations ordered by checkpoint. In some cases, a journal mayequivalently be referred to as a lightweight journal due to the journalincluding only metadata information, but little or no storage dataprovided by a user to be stored. In some examples, the metadata log 604may be generated or updated during a flush of storage data from NVRAM toa backend bulk storage—where a storage system architecture with NVRAM,and example backend bulk storage, are described above with reference toFIG. 2D. In some examples, the metadata, such as checkpoints 604, may bestored in the source data repository 602 as metadata, without beingincluded within a journal, or metadata log structure, where the journal,or metadata log 604 may be constructed on demand, such as in response toone or more checkpoints being ready for transmission to a target datarepository 624.

In some implementations, a checkpoint may also be referred to as anordered “lightweight checkpoint” of a dataset. In some examples, asdescribed elsewhere, a checkpoint may include metadata describing a setof updates, but where the checkpoints only reference the actual dataassociated with a corresponding set of updates by holding references towhere the data for a given checkpoint is stored in the normal course ofoperations for the storage system. A given set of updates may begin tobe staged in NVRAM, or a first tier of a storage system's storage,before the set of updates, or at least a portion of these of updates isflushed to backing storage, or a second tier of the storage system.

However, in this example, the data referenced by a set of updates withina given checkpoint may survive logical (or address range) overwrites andgarbage collection and is not duplicated into a separate metadatajournal. Further, lightweight checkpoints may be ordered in that toarrive at a complete and consistent point-in-time image of some point intime of the original dataset, each set of updates described in eachlightweight checkpoint between some prior consistent image and the pointin time corresponding to a particular lightweight checkpoint shouldeither be applied to form that point-in-time image or the update couldbe determined to be unnecessary, for example, being due to an overwriteor deletion. In some examples, lightweight checkpoints may be merged,which can be beneficial because merging may release some backing storedata that has been overwritten or deleted, for example by having beenwritten in an earlier checkpoint and overwritten in a later one that ismerged with the earlier one (in which case the data for the earlierwrite may no longer be needed), thereby allowing some otherwise helddata to be garbage collected.

Continuing with this example, such lightweight checkpoints are intendedto represent very fine-grained consistency point moments in time asconsistency points, with each lightweight checkpoint including a set ofupdates that have been signaled as completed, excluding a set of updateswhose processing has not yet started, and potentially including orexcluding updates that are concurrent with the moment in time thecheckpoint represents. In some example, formation of a new lightweightcheckpoint or a duration, or period, between two checkpoints may bebased on time slices, such as every few milliseconds, or operation countslices, such as every 50 to 500 update operations, or based on transfersize or some more complex relationship to update operations, such ascounting a few megabytes of modifications or some number of logicalextent updates, or they can relate to some explicit operation, such asan operation to explicitly tag or name a particular point-in-time so itcan be referenced later such as by a program noticing or being notifiedwhen it is received and applied by to replication target, anycombination of these and other triggers. Such tags or names could alsobe searched for within a continuous data protection implementation.

In some implementations, lightweight checkpoints may differ fromsnapshots in that they do not affect the durable structure of thestorage system beyond whatever side structure is used to store them,apart from the garbage collection or overwrite holds, and lightweightcheckpoints may be discarded with minimal effect, other than the releaseof those garbage collection or overwrite holds. Further, in some cases,lightweight checkpoints may also lack individual administrative handles,perhaps apart from lightweight checkpoints that are explicitly tagged ornamed. In some example, lightweight checkpoints exist almost exclusivelyas an ordered list of metadata bundles describing updates, where theordered list of metadata may be stored in a log-style structure.Further, lightweight checkpoints may be persistent or not persistent, independence at least upon an intended use of the lightweight checkpoint.In particular, near-sync replication may have crash or resynchronizationrecovery mechanisms that may operate independently of lightweightcheckpoints and that may then not require persisting of lightweightcheckpoint logs, while the target of replication might separatelybenefit from persisting checkpoints on the target storage system forfault recovery purposes, such as part of making application oflightweight checkpoints atomic.

In some implementations, if the metadata for a lightweight checkpointrepresents logical composite and leaf extents, as described in priorpatents, then a lightweight checkpoint may be a set of descriptions forupdating these logical composite and leaf extents which are themselvesmetadata descriptions that reference stored data by content identifierreferences. In some cases, use of content identifiers irrespective ofthe use of an extent model may also be beneficial in that such usepreserves information about duplicates and may be used as part of astrategy to avoid transfer of content that a target storage system mayalready be known to store. For further clarification, these priorpatents include, U.S. patent Ser. Nos. 16/050,385, 62/598,989, and15/842,850, which are incorporated herein for all purposes.

Continuing with this example, the structure of a metadata representationof a dataset may be particularly effective in a Flash storage systembecause Flash does not allow overwrite in place at the chip level andmay generally be driven, at some level, by garbage collection algorithmsthat can readily account for a wide variety of references that haveholds on written data. In some cases, some details may account for theNVRAM aspects which do not have to follow the samewrite-elsewhere-with-garbage-collection model, but at least the bulkdata writes for lightweight checkpoints are not separate writes thatrequire separate storage.

In some implementations, and as described in other sections of thisreference, some applications of lightweight checkpoints may includenormal operation of near-sync replication (in contrast to initializationor resynchronization), which may also be referred to as asynchronousreplication. In this example, lightweight checkpoints may be transferredover a network link to some target repository that may then apply thelightweight checkpoints to a tracking copy of the original dataset, withlightweight checkpoints (and their referenced data) being held at leastuntil the tracking copy has been updated.

In some cases, if checkpoints may be received or applied out-of-order,then all intermediate checkpoints may need to be received and appliedbefore the lightweight checkpoint on the source system can be released.Generally, lightweight checkpoints should be applied atomically, such asby using some transaction mechanism. One transaction mechanism is toreceive the metadata for a lightweight checkpoint, receive all the datacontent for a lightweight checkpoint and storing it locally on thetarget, and then roll forward the tracking copy to incorporate themetadata updates in the lightweight checkpoint with its data referencesupdated to reference the data content stored locally on the target.

Further, other applications of lightweight checkpoints may include:

-   -   In some examples, a tracking copy may be converted into a        snapshot or a clone to provide a stable image at some point in        time, thereby allowing use of a point-in-time image for testing        purposes or failover purposes;    -   In some examples, if a source-to-target interconnect and the        target storage repository are not roughly keeping up with the        rate that the source storage system itself is receiving data,        storing it, and forming and transferring lightweight        checkpoints, then these lightweight checkpoints can start        building up. In this scenario, there are several reactions to        this that can be used: lightweight checkpoints could be merged        to reduce their cost (the source dataset points-in-time        associated with named or tagged checkpoints might be        preferentially retained); back pressure could be put on the        source storage system to reduce the rate at which it receives,        processes, or completes updates; a subset of checkpoints could        be converted to more durable snapshots; or lightweight        checkpoint-based replication could be discarded in favor of        replication based on periodic snapshots. In some cases, some        number of periodic snapshots might already be kept for resync or        connection loss/reconnect purposes so switching to snapshot        replication may already be fully ready to go—meaning that        lightweight checkpoints since the last snapshot may simply be        discarded if replication is not keeping up sufficiently for the        lightweight snapshots to be useful (further clarification may be        found within U.S. patent Ser. No. 15/842,850, which is        incorporated herein for all purposes);    -   In some examples, connection loss or other kinds of        interruptions to replication may generally be handled by        switching to some other scheme, such as snapshot based        replication, or by using a resync model similar to what is        described for synchronous replication recovery, though without        the need to catch all the way up at the very end;    -   In some examples, the transfer of data can be initiated by the        sender side by simply sending the referenced data to the target        storage system along with sending the lightweight checkpoint        metadata updates. Further, the transfer of data may instead be        initiated by the target storage system: if the lightweight        checkpoint metadata lists content identifiers, then the target        storage system can reuse references to content it already stores        but can then request retrieval of content it does not current        store. This can reduce total bandwidth required, though if the        network link has to be sized for the update rate, the benefit        may be low; and    -   In some examples, if the source storage system itself stores        content compressed as some kind of compressed blocks, then the        compressed blocks may in many cases be transferred directly        rather than being uncompressed and then possibly recompressed        before being transmitted over the network.

In some implementations, lightweight checkpoints may be used toimplement continuous data protection either on the original storagesystem—with or without replication being involved—or on a replicationtarget system by storing the lightweight checkpoints on the targetstorage system rather than simply applying and then discarding them. Incontinuous data protection, various point-in-time images of a datasetcan be accessed by rolling forward a copy of a dataset to include alllightweight checkpoints up to the lightweight checkpoint correspondingto some source dataset point-in-time of interest.

For example, if the storage system also implements durable snapshots,then only lightweight checkpoints since the point-in-time of the mostimmediately prior snapshot may need to be applied. Generally, highergranularity is more interesting for more recent history of a dataset andless granularity is needed farther back, allowing for the possibility ofever more aggressive lightweight checkpoint merging as points-in-timerecede, or eventually discarding them in favor of less frequentsnapshots.

Further, if continuous data protection is used to locate a point in timejust before where an unwanted change or corruption was introduced, thenrelatively fine grained lightweight checkpoints (milliseconds to a fewseconds to every few minutes) might only need to be kept until plenty oftime has elapsed to ensure that corruption will have been noticed andrecovery procedures started. After that, 30 minute or hourly or evendaily snapshots might be preferable (or such rollbacks may be consideredunnecessary). Any specific lightweight checkpoint can be converted intoa durable snapshots if snapshots hadn't been created explicitly. Iflightweight checkpoints can be named or tagged, continuous dataprotection could support locating and accessing those named lightweightcheckpoints.

In some implementations, as noted below, under some storage systemconditions, or in response to a user-specified configuration,near-synchronous replication may be transitioned to different type ofreplication, including periodic replication or synchronous replication.Further, in some implementations, a source data storage system mayimplement synchronous replication that is pod-based among a cluster ofstorage systems, but where one or more of the source data storagesystems also implement lightweight checkpoints for near-synchronousreplication with a target storage system that may be initiated in theevent of a communication fault with the other storage system in thecluster of storage systems—thereby allowing the source storage system tomaintain both synchronous data replication over near distances and tomaintain data resiliency over longer distances. Further, in someexamples, RPO may be configurable, where the time or operation size oflightweight checkpoints may be configured or adjusted based on, atleast, available network bandwidth or supporting flow-control (asdiscussed above). In some cases, if a set of synchronously replicatingstorage systems exchange checkpoint information between them as part oftheir operation, then near-synchronous replication can operate andcontinue from any of the storage systems that synchronously replicatethe checkpoint information, including continuing after the failure ofone such storage system, including parallel transfer of data andmetadata from multiple of the synchronously replicating storage systems.Such parallel data transfer could, for example, involve the target ofnear-synchronous replication requesting data for referenced composite orlogical extents or content identifiers from any set or subset of thesynchronously replicating storage systems.

Further, in some implementations, an addition to near-synchronousreplication is short-distance synchronous replication of metadata anddata updates, combined with longer-distance non-synchronous replicationof lightweight checkpoints. In such an example, this may provide what issometimes called “bunker” replication where a storage system withinsynchronous replication distance is sized to store enough for in-transitdata and metadata but is not sized to store a complete dataset. In thisexample, if the primary (complete) copy fails but the intermediate“bunker” storage survives, then the further distant non-synchronoustarget can be caught up by applying the updates that were storedsynchronously on the bunker storage. Further, in this example, if bothprimary and bunker storage fail, then at least the longer-distancestorage is consistent and within the longer distance RPO. Continuingwith this example, the lightweight checkpoints may be formed andtransferred by either the bunker storage system or by the primarystorage system, or can be formed and transferred by a combination of theprimary storage system and the bunker storage system.

In some implementations, a metadata log 604 schema may be sorted by(pod, checkpoint), which allows for traversal in a correct order, wherea same schema may be used on both a source data repository 602 and atarget data repository 624. In this example, a write operation may beencoded in a metadata log 604 by indicating both a physical extentidentification along with address information of all writes for a givencheckpoint. Further, in some cases, a metadata log 604 may containoperations to modify a metadata representation 614 of the dataset thatcorrespond to system operations, such as copy-on-write (CoW). Forexample, modifications to a metadata representation 614 may includemodifications due to an XCOPY, WSAME, snapshots, CoW, among others. Anexample of such operation-style metadata may include a sequence ofupdates to logical and composite extents, with any written content tiedto a checkpoint being retained at least until the checkpoint is nolonger needed for replication or other purposes. In this case, themetadata log may contain the logical and composite logical extentupdates including references to any stored data, with the stored databeing a held reference to the content stored in the storage system forits regular use but with any garbage collection or overwrite held off aslong as the checkpoint is retained. Further, in some cases, contentoverwrites within a checkpoint (including within merged checkpoints ifcheckpoint merging is supported) may discard the hold on the earliercontent replaced by later content described by the checkpoint. In someexamples, a metadata log 604 may include metadata representation 614identifier allocations on a source data repository 602, which allows thetarget data repository 624 to avoid trying to look up contentidentifiers that do not exist on the target data repository 624.

In different embodiments, the lifetime of checkpoint entries 606 a, 606b may be configurable to allow for different options for data recovery,including a lifetime extending for an ongoing length of storage servicesthat allows for continuous data protection. In this example, theconfigurable replication system may provide continuous replication,where as data storage operations that modify a volume or dataset arrive,the storage operations are grouped into checkpoints, and where a givencheckpoint may include varying numbers of storage operations. In someexamples, a given checkpoint may include metadata for up to 100 storageoperations. As noted herein, because a garbage collection process maykeep stored data based on references to the stored data location beingreferenced by either general storage system references within thestorage system's general metadata or by a metadata log that includescheckpoints, then the length of the lifetime of the checkpointscorresponds to a length of time for a recovery window for continuousdata protection.

In this example, a checkpoint may be considered a smallest unit of dataconsistency, where if the metadata log 626 received at the target datarepository 624 includes a particular checkpoint, then a replica dataset634 that is generated by replaying the storage operations in theparticular checkpoint will include all storage operations from allcheckpoints that were generated prior to the particular checkpoint—andsuch a policy provides for a crash consistent recovery point for thereplica dataset 634. Further, if there is a snapshot that is from apoint-in-time earlier than the desired replay point, then only replaycheckpoints since that snapshot may be needed during a recovery. In thisexample, checkpoints may be merged to allow garbage collection ofoverwritten data, and checkpoints may also be periodically converted tosnapshots if that results in a cleaner format or a better or simplerrelationship with garbage collection.

In some implementations, snapshots may be used to coordinate a point intime in the update stream. For example, an application can make someupdate then issue a snapshot request, and if snapshots are a type ofupdate that is replicated, then when the snapshot appears on the targetstorage system, that point in time for the application is present. Inthis example, this could be generalized to some kind of tag, such that asnapshot is not necessarily needed. Further in this example, if somemetadata tag is set on a dataset, or on some component within a dataset,and that tag is handled as a type of update within the log/checkpointmodel, then a monitoring program on the target storage system coulddetect when that point in time of the source dataset has been reached onthe target by noticing the appearance of the tag. The storage systemcould further support a means of notifying programs waiting for suchsnapshots or named or tagged checkpoints being received and processed ona target storage system. Yet further, when the target storage system hasreceived and processed such snapshots or named or tagged checkpoints, itcould send a notification back to the source storage system, which couldthen, in turn, notify interested programs that the snapshot or named ortagged checkpoint is known to have been received and processed on thetarget system. Continuing with this example, such a process could beused, for example, by a program running against the source storagesystem that updates some data, tags a checkpoint, and then takes someaction when notified by the source storage system that the taggedcheckpoint (and thus the update) is known to have been replicated. Forexample, a high level task could perform a set of updates which arereplicated, and where the action taken is that aspects of the continueonly after receiving that notification. In some cases, this in turnallows higher level tasks to be replicated effectively synchronouslyacross long distances even when performing many smaller operations thatare not themselves replicated synchronously. For example, a webapplication might use this to ensure that some requested update to, forexample, a user profile is durable across distances before a web pageshows the durable change to the user profile.

While in this example, replication is described in the context ofreplicating a “volume”, in general, the described replication techniquesmay be applied to any generalized dataset. In other words, in thegeneral case, replication applies to a dataset, which may include one ormore volumes, and/or one or more other types of data or collections ofdata, at a given point in time. In some cases, a dataset may be adataset specified by a pod, where in a pod the actual set of volumes maychange as volumes are added to and removed from the pod, and trackingwill reflect that by adding and removing volumes. Further, in someexamples, continuous data protection of a pod may result in volumesexisting or not existing based on which checkpoint we roll backward toor forward to, and on the volume membership at the pod's source time forthat checkpoint.

Continuing with this example, each incoming write operation may bepersisted as described above with reference to FIGS. 1A-3D, where inaddition to the source volume 658 being updated, a reference to thestorage location of the data corresponding to the write operation isadded to the metadata log 604. In this way, the metadata log 604 mayserve as a buffer that allows recovery after a network outage andsupport bursts of write operations without impeding the reception orhandling of storage operations by the source data repository 602. Inthis example, as checkpoints 606 a, 606 b are completed and createdwithin the metadata log 604, the checkpoints 606 a, 606 b may bereplicated to the target data repository 624 by, for example,transmission of one or more messages that include metadata log 608 usinga standard communication protocol over one or more networks 659. In thisexample, independent of the transmission of the metadata log 604, thesource data repository 602 may also transmit data 610 corresponding tothe checkpoints 606 within the metadata log 604.

In some implementations, as checkpoints are created within the sourcedata repository 602, a monitoring service may monitor which checkpointsare complete, and determine where the checkpoints may be read. In someexamples, a checkpoint may be created as a checkpoint is written intoNVRAM, or a first tier of fast data storage. In some cases, themonitoring service may provide an interface for accessing checkpointdata from NVRAM or from a given storage location.

Continuing with this example, a target data repository 624 may open oneor more forwarding streams from the source data repository 602, where onthe source data repository 602, each forwarding stream may claim anumber of checkpoints from the monitoring service. In this example, agiven forwarding stream may fetch metadata log 614 information for oneor more checkpoints 606. Similarly, in this example, a given forwardingstream may fetch corresponding storage data for the one or morecheckpoints 606. In this way, one or more communication channels may beopened, in some cases in parallel, between the source data repository602 and the target data repository 624, where the one or morecommunication channels operate to transfer the metadata log 614 andcorresponding data 612 between the source data repository 602 and thetarget data repository 624.

In this example, in response to receiving the metadata log 608, thetarget data repository 624 may persist the checkpoints 628 a, 628 b intoa local metadata log 626. Based on a successful write of the checkpoints628 into the local metadata log 626, the target data repository 624 mayrespond to the source data repository 602 with an acknowledgment, wherein response to the acknowledgment, the source data repository 602 may—independence upon a configuration setting—delete or maintain thecheckpoints 606 a, 606 b.

In some examples, the target data repository 624 may periodically, or inresponse to receiving metadata log 626 information from the source datarepository 602, replay the storage operations within the checkpoints 628to generate and update a tracking volume 632. In some examples,replaying the storage operations may include converting metadata log 626information into regular formatted metadata for the storage system andconverting global content identifiers into local content identifiers;for example, such converting may include mapping content identifiersbetween the source data repository 602 and the target data repository624. In this example, a metadata representation 630 may be implementedsimilarly to metadata representation 614 on the source data repository602, where the physical location information may be different based onuse of physical storage on the target data repository. In some examples,a tracking volume may also be referred to as a “shadow” volume.

In some implementations, content identifiers may be used to mark writtencontent, including content that the source has already determined was aduplicate of other content that the source knows of (for example,through tracking the source write history, source snapshot history,source virtual copy history, and/or any local duplicate detection). Insome examples, the content identifiers may be leveraged when doingrecovery, such as after an extended outage, or when converting fromnear-sync replication to periodic or asynchronous replication.

In some implementations, delivery of a checkpoint as a set of metadataupdates and content identifiers may result in the target storage systemnoticing which content identifiers the target storage system is alreadyaware of and already stores—the target storage system may then requestfrom the source storage system any content whose content identifiers thetarget storage system does not already store or is not already aware of.In some cases, except at moon-level distances, checkpoint delivery maystill result in sub-second RPOs, and may also reduce data transferbandwidth if duplicates are common. Further, in this example, until allmissing content has been requested and received by the target storagesystem, the checkpoint may not be considered completed so the checkpointmay not be deleted to allow garbage collection.

In some examples, the tracking volume 632 is generated in response to apromotion event, where a promotion event may be based on a detectedfailure, detected impending failure, or detected degradation ofresponsiveness beyond a compliance policy threshold of the source datarepository. In some cases, the promotion event may be automaticallygenerated based on such a detection of a promotion event, and in othercases, the promotion event may be responsive to a user specifying thatthe replica data on the target data repository 624 be promoted.

In some implementations, a user may promote a tracking volume 632 inorder to use a replica of the source data for different uses, such asfor testing—where testing may include modification of the replica datain the tracking volume 632. However, based on a promotion eventgenerating a replica volume 634, any modifications or corruption to thetracking volume that may occur during testing may be undone or reversedby referencing the replica volume 634. In this example, promotion of thetracking volume 632 also includes configuration filtering and/orreconciliation as part of making the tracking volume 632 a new volumeavailable for use by a computational process, a computing device, or acompute node. Further, demotion or deletion of a volume may cause a hostto reconfigure a connection to continue to access replica data on thetarget data repository 624.

While in some implementations, received metadata log 608 information maybe played to generate the tracking volume 632 without storing themetadata log 608, or keeping a stored metadata log 626, the storedmetadata log 626 may serve as a basis for providing data consistencyguarantees described above with regard to the storage operations in acheckpoint.

Further, separating the generation of the tracking volume fromdependence upon checkpoints as they are received, and instead generatingthe tracking volume from stored checkpoints supports receivingcheckpoints out of order and the option to order the checkpoints priorto building the tracking volume 632. In other words, checkpoints may betransmitted and received out of order, but in general, checkpoint maynot be applied out of order, so in some cases applying the checkpointsto a tracking dataset or volume may be delayed until interveningcheckpoints are received. This example may be generalized as requiringthat all intermediate checkpoints be received before the trackingdataset or volume may be advanced to the time associated a receiveddataset (irrespective of how checkpoint updates are actually applied).

Further, in this example, if for some reason, such as a recovery eventon the source data repository 602 based on data loss or based on a useror application requesting access to the replica volume or based on afailover request to begin using the replica volume 634 as a primary oruser-accessible volume, then the target data repository 624 may promote,or activate, the replica volume 634. In response, the existingcheckpoints in the metadata log 626 may be replayed to generate aversion of the tracking volume 632 consistent with a most recentcheckpoint received, and the tracking volume 632 may be used to create aversion of the source volume 658.

In some examples, in response to a recovery event—such as a source datarepository 602 losing a connection with a host computer (not depicted)or applications sending storage operations, performance degradationbeyond a threshold value, storage capacity exceeding a threshold value,or a degradation in response times—the target data repository 624 may bepromoted to handle all further storage operations from the hostcomputer, and another data repository may be selected. In this example,the replica link from the original source data repository 602 to thetarget data repository 624 may be reconfigured to flip directions, wherethe target data repository 624 becomes a new source data repository andanother data repository becomes a new target data repository, and whereother replica link characteristics stay the same.

The continuous replication from the source data repository 602 to thetarget data repository 624 may also be described in terms of pods, wherepods and pod characteristics are described above with reference to FIGS.4 and 5 . As noted above, where FIG. 5 describes use of pods inimplementing synchronous replication, in this example, pods are used forasynchronous, or near-synchronous replication. In other words, in thisexample, source volume 658 may be included within a pod 640, and thereplica volume 634 may be included within pod 642. In this way, inresponse to an indication that a user or application intends to use thereplica data, and the tracking volume 632 being promoted, the replicapod 642 is updated with the most current contents from the trackingvolume 632. While in this example a pod is depicted as include a singlevolume, in other examples, a pod may generally hold any type andquantity of data, including multiple volumes and/or multiple structuredor unstructured datasets.

Further, in some implementations, as discussed above, there may be adynamic relationship of volumes to pods, where the dynamic collection ofvolumes within a pod may be related to a clock value within the updatestream on a source storage system. For example, a checkpoint mayintroduce volumes to a pod, change volume characteristics (name, size,etc.) and may remove volumes. In this example, if there are protectiongroups or some similar organizational concept within a pod, then theseprotection groups may also change with those changes being propagatedthrough checkpoints. In this way, a near-sync target storage system mayactually take over relatively seamlessly as a periodic replicationsource with all relationships intact, minus whatever time difference thelast processed checkpoint is from the previous active source. In short,in some cases, it is the unified nature of the metadata model betweensynchronous replication, near synchronous replication (near-sync), andperiodic replication (or asynchronous) replication, coupled with thelocal-to-global-to-local content identifier and logical and compositeextent identifier transformations that provides improvements to variousaspects of a storage system and of a storage system replication process.

As depicted in FIG. 6 , a data repository 602 stores both data 612 fromincoming storage operations 652, and a metadata representation 614 ofthe data 612. In this example, a metadata representation 614 may beimplemented as a structured collection of metadata objects that,together, may represent a logical volume of storage data, or a portionof a logical volume, in accordance with some embodiments of the presentdisclosure. Metadata representation 614 may be stored within the sourcedata repository 602, and one or more metadata representations may begenerated and maintained for each of multiple storage objects, such asvolumes, or portions of volumes, stored within the data repository 602.

In other examples, other types of structured collections of the metadataobjects are possible; however, in this example, metadata representationsmay be structured as a directed acyclic graph (DAG) of nodes, where, tomaintain efficient access to any given node, the DAG may be structuredand balanced according to various methods. For example, a DAG for ametadata representation may be defined as a type of B-tree, and balancedaccordingly in response to changes to the structure of the metadatarepresentation, where changes to the metadata representation may occurin response to changes to, or additions to, underlying data representedby the metadata representation. Generally, metadata representations mayspan across multiple levels and may include hundreds or thousands ofnodes, where each node may include any number of links to other nodes.

Further, in this example, the leaves of a metadata representation mayinclude pointers to the stored data for a volume, or portion of avolume, where a logical address, or a volume and offset, may be used toidentify and navigate through the metadata representation to reach oneor more leaf nodes that reference stored data corresponding to thelogical address. Data objects may be any size unit of data within thedata repository 602. For example, data objects may each be a logicalextent, where logical extents may be some specified size, such as 1 MB,4 MB, or some other size, such as a system-specified block size.

In some implementations, as described above with reference to FIGS.1A-3D, the data repository 602 may include multiple types of datastorage, including NVRAM and Flash storage, where NVRAM may be used as astaging area for incoming storage operations, and where Flash storagemay provide long-term, durable storage. In this example, the sourcevolume 658, or portions of the source volume 658, may be stored inNVRAM, and the entire source volume may be stored within Flash memory,or as depicted in FIG. 6 , data store 660.

In some implementations, the metadata log 604 is ordered according tocheckpoints, and is a journal, or log, describing all changes to storeddata, and where checkpoints within the metadata log 604 that have notalready been transmitted to the target data repository 624 aretransmitted in response to generation or completion of a singlecheckpoint, or a set of checkpoints, in dependence upon a target RPO.For example, depending on a size of a checkpoint, or a quantity ofdata-modifying operations described by the checkpoint, more frequenttransmission may be may in dependence upon a lower target RPO.

Further, as described above, checkpoints 606 within the metadata log 604may include references to stored content such as blocks within datastore 660 where that stored content consists of what the storage systemwould have stored were it not for the replicated checkpoint. In thisway, the storage required for the metadata log and checkpoints isreduced considerably versus what would be required for a complete log ofall updates that includes both metadata and a duplicate copy of datathat was being written to the source storage system. In some examples, aservice, or process, or controller, operating on the source datarepository 602 may monitor creation of checkpoints, and forward ortransmit the checkpoint, or set of checkpoints, to the target datarepository 624.

In some implementations, references within checkpoints, and as aconsequence, references within a metadata log, may refer to objects ordata stored on the source data repository 602 that have been modified bysubsequent storage operations, but where the data stored on the sourcedata repository 602 has not yet been transferred to the target datarepository 624. In such a scenario, if a garbage collection process onthe source data repository 602 relies only on a reference tablemaintained by a storage controller managing data within the source datarepository 602, then the garbage collection process may delete data orreallocate or otherwise overwrite a storage location that results indata referenced by a metadata log becoming unavailable or no longervalid as a source of content for a replicated checkpoint, therebycompromising the replication. To overcome such a scenario, in someexamples, a garbage collection process on the source data repository 602may reference both a reference table maintained by a storage controlleror source data repository 602 process and also a list of references heldby lightweight checkpoints, and specifically, a list of referenceswithin one or more checkpoints within a metadata log. Over time,checkpoints can be merged together to allow some overwritten content tobe released for garbage collection.

In this way, based at least on both sources of data references—systemreferences and metadata log references—a garbage collection process maypreserve data that has not yet been replicated, but would otherwise bemodified or deleted by subsequent storage operations. Such datapreservation during garbage collection also holds true for continuousdata protection, when checkpoints are retained on a source storagesystem for some period of time in order to allow for flexible rollback,where the period of time may be configurable to an arbitrary quantity oftime. In other words, a garbage collection process may determine thatcontent at a storage location is not needed, and may be reclaimed orgarbage collected, based on the content at the storage location notbeing referenced by any checkpoints in a metadata log or referenced by astorage system reference table.

In some implementations, as noted above, each checkpoint is exclusive ofevery other checkpoint, and based on the checkpoints being ordered, thecheckpoints may be transmitted in any order to the target datarepository 624. In this example, on the target data repository 624, thecheckpoints are applied, or replayed, in order to create a consistentversion of the data stored on the source data repository 602. In somecases, the data transmitted from the source data repository 602 to thetarget data repository 624 may be read from data storage within datastore 660, for example if the data has been flushed from the NVRAM toFlash, or from the NVRAM, for example if the data continues to be storedin the NVRAM.

In some implementations, depending on configuration settings withrespect to RPO, data may remain on the source data repository 602 formore or less time. In some cases, the longer that data remains on thesource data repository 602, the greater the opportunity to performtransformations that may reduce the quantity of data transferred to thetarget data repository 624. For example, incoming data may bededuplicated, or overwrite previously written data, or may be deleted,among other operations or transformations, which may reduce the quantityof data that is transferred from the source data repository 602 to thetarget data repository 624.

In some implementations, the messaging mechanisms may be implementedsimilarly to the messaging mechanisms described above for synchronousdata replication, with reference to FIGS. 4 and 5 .

For further explanation FIG. 7 illustrates a configurable replicationsystem that provides continuous replication with minimal batching and anadjustable recovery point objective. In this example, a managementobject that specifies a replication policy between a source pod and areplica pod may be referred to as a “replica link”.

A replica link specification may include a specification for a source ofdata for replication and a target for replica data, including storagedata, checkpoints, metadata representations, or metadata logs (orjournals). In some cases, the source of data may be a volume, astructured or unstructured dataset, a bucket, a file within a filesystem, an entire file system directory, or a combination ofsources—where the data sources are stored within a source datarepository 602.

In some cases, there may be one or more replication data targets, where,for example, a source data repository 602 includes multiple pods 640,704 and multiple, respective replication data targets, illustrated astarget data repositories 750, 752. In this example, source pod 640includes a volume 658, source pod 704 includes a volume 702, replica pod706 includes replica volume 708, and replica pod 710 includes replicavolume 712. Further, as illustrated in FIG. 7 , there may be one or morereplica links 760, 762 that manage replication from the source datarepository to one or more target data repositories 750, 752.

In some implementations, in an example where replication includes theuse of snapshots of the source data, a replica link may specify asnapshot policy, which may specify conditions under which a snapshot maybe taken. For example, if asynchronous replication, as described abovewith reference to FIG. 6 , becomes backed up—such as where the quantityof backed up data and/or metadata pending transfer would result in anRPO that is beyond a threshold RPO value—then a snapshot may be taken.In other examples, the snapshot policy may specify that snapshots are tobe taken at a specified schedule, and may specify a length of time forkeeping snapshots available.

Further, in some examples, instead of or in addition to generatingsnapshots for a source data repository to reduce a backlog of metadataand/or data transmissions to a target data repository, a source datarepository may perform one or more transformations or optimizations onthe data and/or metadata to be transmitted. For example, if a sourcedata repository determines that data pending transfer is identical todata already transferred, then the source data repository may avoidsending the duplicate data that is pending transfer. As another example,checkpoints within a metadata log may be folded together, where if thereis an overwrite between two checkpoints, then the source data repositorymay avoid sending data that has been overwritten, as reflected by thefolded checkpoints.

Further, a replica link may also specify a replica policy, where thereplica policy may include or be exclusively snapshots, specifycontinuous, but not synchronous replication, or specify synchronousreplication. In all cases, a user may be provided with a single userinterface, with a single workflow, for a replica link specificationallowing for specification of one or more characteristics for datareplication.

In some implementations, a replica link may also specify a compliancepolicy. For example, a compliance policy may specify that for aparticular type of replication policy—for example, continuous,synchronous, asynchronous, snapshot—the replication should adhere tospecified parameters. As one example, for a snapshot replication policy,the compliance policy may specify that if a frequency, or schedule,according to which snapshots are taken fails to meet a threshold levelof compliance, then a system warning may be generated. Similarly, ifdata and/or metadata is not being transferred quickly enough to satisfya specified RPO, or other performance metric, then a system warning oralert may also be generated. Alternately, updates on the source storagesystem can be slowed down in order to avoid exceeding the RPO.

However, in other cases, in response to failing to satisfy a thresholdlevel of compliance, other corrective actions may be taken, for example,of a target data repository is a cause of a backup, or has had a drop inperformance, or is nearing capacity, then a diagnostic may be initiatedto identify correctable issues or an alternate target data repositorymay be identified for transferring the target replica data to the newtarget data repository. In some implementations, the replica link mayalso store attributes of the replication history, such as identifying apoint at which a source data repository became frozen or unavailable.

Generally, a replica link may be used to specify a replicationrelationship, and depending on whether a pod is active or passive,determines a direction of the replication, where replication occurs inthe direction of an active (or activated or promoted) pod to a passive(or deactivated or demoted) pod. In this example, a replicationdirection may also be changed if all pods connected to the replica linkare in communication and reach consensus on a change in replicationdirection. In this way, a source pod may be protected by creating areplica link to another, deactivated, pod on another data repository,where hosts or host groups may be connected to the deactivated pod onthe target data repository to read—nearly synchronous data from thesource pod.

For further explanation FIG. 8 illustrates cloning a tracking copy ofreplica data within a configurable replication system that providescontinuous replication with minimal batching and an adjustable recoverypoint objective.

In this example, a cloned image of a tracking copy of replica data maybe considered a sandboxed working set of replica data, which mayalternatively be referred to as a fire drill copy of a dataset that ismade available while the tracking volume and/or tracking datasetcontinues to be updated, where a sandboxed or fire drill copy may bemodified for multiple purposes without affecting the RPO of the ongoingreplication process.

However, as described in greater detail below, as illustrated in FIG. 6, a source volume is replicated, but more generally, any dataset may bereplicated, including pods, which may have one or more volumes of dataat a given point in time. In other words, for simplicity, a “volume” isdiscussed in terms of data replication, but the more general case maycopy various types and combinations of source data.

In some implementations, and as discussed above, a source datarepository 602 may be configured to create an active/passiverelationship between two pods, where an active, or primary, pod 640 ison a source data repository 602, and a passive, data replication pod 641is on the target data repository 624. In this example, these may be twodifferent pods that are linked or connected together, with the same datacontent—including volumes, protection groups, volume snapshot history.However, in this example, target volumes may have different serialnumbers than the source volumes, and where the passive pod on the targetdata repository 624 may be some number of seconds behind in content,depending on what RPO is maintained.

In some implementations, during normal operation, as data is writteninto the source pod 640 on the source data repository 602, that data maybe continuously streamed to the target data repository 624. In thisexample, both the source data repository 602 and the target datarepository 624 may journal, or generate a metadata log, of the stream ofchanges and store the metadata log not as full, separate copies in aprovisioned device, but instead use deduplication techniques and pointerreference handling to efficiently track changes without requiringadditional space for fully specifying the metadata log. Further, in someexamples, internal consistency points may be maintained for the purposeof restarting or resynchronizing the replication relationship betweenthe source data repository 602 and the target data repository 624.Further, in this example, if snapshots are created on the source datarepository 602, the snapshots may show up on the target after thesnapshots have been synchronized on the target data repository 624,where users may use protection groups inside the source pod 640 tomanage these snapshots.

In some implementations, with regard to failover preparation, users mayconfigure host connections to the volumes on the passive pod 641 on thetarget data repository 624 to make a failover process shorter andsimpler. However, these volumes on the target data repository may beread-only while the target pod 641 is in a passive state. Further, inthis example, after the volumes on the target data repository 624 becomewriteable, for example, due to a recovery event or failure event on thesource data repository 602, and before any applications start using thedata on the target data repository 624, a host operating system—such asa host operating system on a computing device that was previously usingstorage services on the source data repository 602 may remount filesystems in order to ensure that any file system buffers in the hostoperating system, or application on the host, have been cleared and donot contain stale or invalid data from a previous version of thevolumes.

In some implementations, with regard to testing failover, a user maypromote, or activate, the target pod 641 on the target data repository,where promoting, or activating, the target pod 641 makes the target pod641 writeable and the pod data that is presented to a host may beprovided for access and where the target pod 641 may correspond to thepoint in time of the last transferred RPO before activating the targetpod 641. Further, in this example, applications may be started fortesting on the target data repository, and the applications may write todata in the target pod 641. In this example, new data may continue to bereceived at the source data repository 602, and that new data maycontinue to be streamed from the source data repository 602 to thetarget data repository 624, where the target data repository 624maintains both the tracking copy of the replica data and also acceptsstorage operations that write to the cloned image created in response tothe activation/promotion. In this example, the target data repository624 may, as it receives new data, maintain the RPO and manage that in aseparate accounting bucket using metadata and pointer management forspace efficiency. In this example, in response to testing on the targetdata repository 624 being complete, a user may demote, or deactivate,the target pod 641 and any testing changes written there may bediscarded—or the testing changes may be saved in a pod snapshot for someperiod of time.

In some implementations, with regard to an actual or real failover, theprocess may be similar to the above-described example of a testfailover. Specifically, in this example, a target pod 641 on the targetdata repository 624 may be promoted, or activated, as for a failovertest, and host mounts may be refreshed, where a user may then start upapplications that use storage services directed to the target pod 641.Generally, in the event of an actual failure at the source datarepository 602, data replication may halt. However, in this example, thedata replicated from the source data repository is not affected by theupdates directed to the target data repository 624 while the source datarepository 602 is offline or unable to handle storage requests. In theevent of the source data repository 602 coming back online, then thesource pod 640 and the target pod 641 may be synchronized, the targetpod 641 may be made passive or demoted, and the source pod 640 may bemade active or promoted.

In some implementations, the target data repository 624 may implementcontinuous data protection, as described above, where after a target pod641 on the target data repository 624 has been activated or promoted,and the target data repository 624 has an independent version of thetracking copy of the dataset in the form of a cloned image that has beenmodified by one or more updates, a user may use the continuous dataprotection features to access or revert to an arbitrary previous pointin time, or may instead of converting the near up-to-date tracking copyinto a replica dataset, some other point in time can be converted into areplica dataset, with all the same behaviors as described previously.

In this example, a target data repository 602 generates replica databased on ordered metadata logs received from a source data repository,and generates a cloned image of a tracking copy of the replica dataavailable for reading and modifying—without losing, modifying, orcompromising an accessible version of the replica data from the sourcedata repository.

As described above, and in this example, continuous replication ispod-based and provides multiple recovery options. In this example, thecontinuous replication process described above with reference to FIGS.4A-7 transmits an ordered metadata log and corresponding data from asource data repository to a target data repository 624. Further, asdescribed above with reference to FIGS. 6 and 7 , the metadata log andcorresponding data may be used to generate a tracking pod 641, includinga tracking volume 632, which in this example, is referred to as atracking copy of replica data.

Further in this example, the replica data on the target data repository624 is made available—in the form of a cloned image of the tracking copyof replica data—to users to modify, where modifications may besandboxed, or isolated from other versions of the replica data, toprevent any data loss to the replica data received from the source datarepository from being lost or inaccessible.

As illustrated in FIG. 8 , the example method includes: receiving (802),at a target data repository 624 from a source data repository 602,metadata 852 describing one or more updates to a dataset stored withinthe source data repository 602; generating (804), based on the metadata852 describing the one or more updates to the dataset, a tracking copy854 of replica data on the target data repository 624; and generating(806), based on the tacking copy 854, a cloned image 856 of the datasetthat is modifiable without modifying the tracking copy 854 of thereplica data.

Receiving (802), at the target data repository 624 from the source datarepository 602, metadata 852 describing one or more updates to a datasetstored within the source data repository 602 may be carried out asdescribed above with regard to FIGS. 6 and 7 , where a target datarepository 624 receives checkpoints 528 that are part of an orderedmetadata log 626.

Generating (804), based on the metadata 852 describing the one or moreupdates to the dataset, the tracking copy 854 of replica data on thetarget data repository 624 may be carried out as described above withregard to FIGS. 6 and 7 , where a tracking volume 632, which in thisexample is referred to as the tracking copy of replica data, may begenerated in response to a promotion event or in response to other typesof events. As discussed in greater detail above, the storage operationsdescribed in the checkpoints of the metadata log may be replayed togenerate the tracking volume, or in this example, the tracking copy ofreplica data.

Generating (806), based on the tracking copy 854, a cloned image 856 ofthe dataset that is modifiable without modifying the tracking copy 854of the replica data may be carried out as described above with regard toFIGS. 6 and 7 , where a cloned image may be generated in response to,for example, a promotion or activation during a test failover or a realfailover.

In some examples, the cloned image 856 may be modified responsive to oneor more storage operations 860, without modifying the tracking copy 854of replica data from the source data repository 602 that is stored onthe target data repository 624, where modifying the cloned image may becarried out as described above with reference to FIGS. 6 and 7 , wherethe replica data from the source data repository 624—that is preventedfrom being modified by the one or more storage operations 860—is thereplica volume 634 created when the tracking volume 632 is promoted, oractivated, and where the storage operations 860 modify the trackingvolume, or in this example, modify the cloned image 856 of the trackingcopy 854 of replica data. In this example, the storage operations 860may be received from one or more of: a computational process 850, acomputing device 850, or a compute node 850.

In this way, as described above, a user may mount a volume or datasetthat has been promoted on the target data repository 624 to performtests or other kinds of data analysis that may include modification ofthe cloned image of replica data. After a user is done modifying (806),by testing or analyzing the generated cloned image of replica data, themodified dataset may be discarded or the modified dataset may bepersisted for further use.

For further explanation FIG. 9 illustrates a cloned image of a trackingcopy of replica data within a configurable replication system thatprovides continuous replication with minimal batching and an adjustablerecovery point objective.

In this example, similar to the example described above with referenceto FIG. 8 , a target data repository 602 generates replica data based onordered metadata logs received from a source data repository, andgenerates a cloned image of a tracking copy of the replica dataavailable for reading and modifying—without losing any of the replicadata from the source data repository

The example method illustrated in FIG. 9 is similar to the examplemethod described with reference to FIG. 8 in that the example methodillustrated in FIG. 9 includes: receiving (802), at a target datarepository 624 from a source data repository 602, metadata 852describing one or more updates to a dataset stored within the sourcedata repository 602; generating (804), based on the metadata 852describing the one or more updates to the dataset, a tracking copy 854of replica data on the target data repository 624; and generating (806),based on the tacking copy 854, a cloned image 856 of the dataset that ismodifiable without modifying the tracking copy 854 of the replica data.

However, the example method illustrated in FIG. 9 further includesreceiving (902), at the target data repository 624 from the source datarepository 602 and independent from receiving (802) the metadata 852including the checkpoints describing the one or more updates to thedataset, data 952 corresponding to the one or more updates to thedataset, and where the example method illustrated in FIG. 9 furtherspecifies that generating (804), based on the metadata 852 describingthe one or more updates to the dataset, a tracking copy 854 of replicadata on the target data repository 624 includes applying (904), inorder, the one or more updates corresponding to the data received fromthe source data repository 602.

Receiving (902), at the target data repository 624 from the source datarepository 602 and independent from receiving (802) the metadata 852including the checkpoints describing the one or more updates to thedataset, data 952 corresponding to the one or more updates to thedataset may be carried similarly as described above with reference toFIG. 8 and receiving (802), at the target data repository 624 from thesource data repository 602, metadata 852.

As described above with reference to FIGS. 4A-7 , a source datarepository 602 may send data 952 independent from metadata 852 to atarget data repository 624. In this example, the method described withreference to FIG. 8 , which focuses on using metadata to generate thecloned image of replica data is expanded to include applying (904), inorder, the one or more updates corresponding to the data received fromthe source data repository 602, and which may be carried out asdescribed above with reference to FIG. 6 and replaying storageoperations in checkpoints of a metadata log. In this example, themetadata log includes metadata that specifies, for each storageoperation, reference information to identify a corresponding portion ofdata 952 received (902).

Example embodiments are described largely in the context of a fullyfunctional computer system. Readers of skill in the art will recognize,however, that the present disclosure also may be embodied in a computerprogram product disposed upon computer readable storage media for usewith any suitable data processing system. Such computer readable storagemedia may be any storage medium for machine-readable information,including magnetic media, optical media, or other suitable media.Examples of such media include magnetic disks in hard drives ordiskettes, compact disks for optical drives, magnetic tape, and othersas will occur to those of skill in the art. Persons skilled in the artwill immediately recognize that any computer system having suitableprogramming means will be capable of executing the steps of the methodas embodied in a computer program product. Persons skilled in the artwill recognize also that, although some of the example embodimentsdescribed in this specification are oriented to software installed andexecuting on computer hardware, nevertheless, alternative embodimentsimplemented as firmware or as hardware are well within the scope of thepresent disclosure.

What is claimed is:
 1. A method comprising: generating, based onmetadata describing one or more updates to a dataset stored within asource data repository, a tracking copy of replica data on a target datarepository; generating, after receiving an indication to begin acceptingmodifications to the tracking copy of the replica data, a cloned imageof the dataset that is modifiable without modifying the tracking copy ofthe replica data; and responsive to a storage operation directed to thetarget data repository, modifying the cloned image of the datasetwithout modifying the tracking copy of the replica data.
 2. The methodof claim 1 further comprising receiving, at the target data repositoryfrom the source data repository, metadata describing one or more updatesto the dataset stored within the source data repository.
 3. The methodof claim 1, wherein a replica link specifying a replica configurationchanges direction of data replication from the target data repository tothe source data repository.
 4. The method of claim 1, wherein a snapshotof the cloned image is created that describes modifications made to thecloned image by one or more storage operations directed to the targetdata repository from a host computing device.
 5. The method of claim 1,wherein the metadata references content identifiers on the respectivesource data repository and target data repository, wherein the contentidentifiers are a basis avoiding transfer of data based on identifyingcontent on the target data repository that is the same as content on thesource data repository, and wherein content is identified as being thesame based on sharing a common definition for respective contentidentifiers on the source data repository and the target datarepository.
 6. The method of claim 1, wherein the metadata includes oneor more ordered checkpoints that specify the one or more updates to thedataset.
 7. The method of claim 6, wherein a quantity of updatesdescribed by a given checkpoint depend on a configurable datareplication setting.
 8. The method of claim 7, wherein the configurabledata replication setting is target recovery point objective.
 9. Themethod of claim 6, further comprising receiving, at the target datarepository from the source data repository and independent fromreceiving the metadata including the one or more checkpoints describingthe one or more updates to the dataset, data corresponding to the one ormore updates to the dataset.
 10. The method of claim 9, whereingenerating the tracking copy of replica data on the target datarepository includes applying, in order, the one or more updatescorresponding to the data received from the source data repository. 11.A storage system that includes a computer memory and a computerprocessor, the computer memory including program instructions that, whenexecuted by the computer processor, cause the storage system to carryout the steps of: generating, based on metadata describing one or moreupdates to a dataset stored within a source data repository, a trackingcopy of replica data on a target data repository; generating, afterreceiving an indication to begin accepting modifications to the trackingcopy of the replica data, a cloned image of the dataset that ismodifiable without modifying the tracking copy of the replica data; andresponsive to a storage operation directed to the target datarepository, modifying the cloned image of the dataset without modifyingthe tracking copy of the replica data.
 12. The storage system of claim11, further comprising computer program instructions that, when executedby the computer processor, carry out the step of receiving, at thetarget data repository from the source data repository, metadatadescribing one or more updates to the dataset stored within the sourcedata repository.
 13. The storage system of claim 11, wherein a replicalink specifying a replica configuration changes direction of datareplication from the target data repository to the source datarepository.
 14. The storage system of claim 11, wherein a snapshot ofthe cloned image is created that describes each of the modificationsmade to the cloned image by one or more storage operations directed tothe target data repository from a host computing device.
 15. The storagesystem of claim 11, wherein the metadata references content identifierson the respective source data repository and target data repository,wherein the content identifiers are a basis avoiding transfer of databased on identifying content on the target data repository that is thesame as content on the source data repository, and wherein content isidentified as being the same based on sharing a common definition forrespective content identifiers on the source data repository and thetarget data repository.
 16. The storage system of claim 11, wherein theprogram instructions, when executed by the computer processor, furthercause the storage system to carry out the steps of receiving, at thetarget data repository from the source data repository and independentfrom receiving the metadata including checkpoints describing the one ormore updates to the dataset, data corresponding to the one or moreupdates to the dataset.
 17. The storage system of claim 11, whereingenerating the tracking copy of replica data on the target datarepository includes applying, in order, the one or more updatescorresponding to the data received from the source data repository. 18.The storage system of claim 11, wherein the metadata includes one ormore ordered checkpoints that specify the one or more updates to thedataset.
 19. The storage system of claim 18, wherein a quantity ofupdates described by a given checkpoint depend on a configurable datareplication setting.
 20. A computer program product disposed on anon-transitory computer readable medium, wherein the computer programproduct includes computer program instructions that, when executed,carry out the steps of: generating, based on metadata describing one ormore updates to a dataset stored within a source data repository, atracking copy of replica data on a target data repository; generating,after receiving an indication to begin accepting modifications to thetracking copy of the replica data, a cloned image of the dataset that ismodifiable without modifying the tracking copy of the replica data; andresponsive to a storage operation directed to the target datarepository, modifying the cloned image of the dataset without modifyingthe tracking copy of the replica data.
 21. The computer program productof claim 20, wherein a replica link specifying a replica configurationchanges direction of data replication from the target data repository tothe source data repository.
 22. The computer program product of claim20, wherein a snapshot of the cloned image is created that describesmodifications made to the cloned image by one or more storage operationsdirected to the target data repository from a host computing device. 23.The computer program product of claim 20, wherein the metadatareferences content identifiers on the respective source data repositoryand target data repository, wherein the content identifiers are a basisavoiding transfer of data based on identifying content on the targetdata repository that is the same as content on the source datarepository, and wherein content is identified as being the same based onsharing a common definition for respective content identifiers on thesource data repository and the target data repository.
 24. The computerprogram product of claim 20, wherein the metadata includes one or moreordered checkpoints that specify the one or more updates to the dataset.25. The computer program product of claim 24, wherein a quantity ofupdates described by a given checkpoint depend on a configurable datareplication setting.
 26. The computer program product of claim 24, whenexecuted, further carry out the step of receiving, at the target datarepository from the source data repository and independent fromreceiving the metadata including the one or more checkpoints describingthe one or more updates to the dataset, data corresponding to the one ormore updates to the dataset.
 27. The computer program product of claim26, wherein the computer program instructions for generating thetracking copy of replica data on the target data repository includesinstructions for applying, in order, the one or more updatescorresponding to the data received from the source data repository. 28.The computer program product of claim 25, wherein the configurable datareplication setting is a target recovery point objective.